So, yeah, we have next topic about democratizing developer productivity with cloud services. We have Jaya, who is a technical product marketing manager with cloud services group and Karan, so both will be giving a demo now. As an individual, like, you know, you can book, book pizza, you can get pizza, right? You can get food delivered to your home when you're hungry. You can get cabs whenever you want it. You can get groceries delivered like magic at your fingertips, right? So there are certain things which are inherently, now, they are a very close part of our life. To understand that, so, yeah, let's talk about cars. Cars is a good example to segue into what we want to show you guys today. So let me ask a broader question. Which car do you want? A car with basic features, basic important features like an engine, wheels, brakes, steering, right?  Plus some extras like safety, you know, advanced dashboard like internet-enabled car or let's say I need an extended warranty, I need roadside assistance, right? So it's a question, which car do you want? Let's start with that as a basic question. But of course, it comes at a cost. You know, nothing is free. The red car or the car with advanced feature will have some price tag to it, okay? So intelligent guy will say, okay, you know what, I'm a hacker. I want to build stuff in my garage. And over the weekend, I don't want to do things. So I'll go and buy a basic car, go to the shop and get the gadgets which I needed for the features. I'll bolt it out over the weekend or maybe multiple weekends. And my basic car will eventually start functioning like my Jazzy car that you are going to be here and it will cost me less. That could be a story, right? It could be a theory. It could be done, right? Nothing difficult about it. But those who are into building a car business, you can think about that. Building a car and managing the car is complex, right? Adding more features to the car is complicated.  Advanced dashboard, you can always go and tear off your existing rooftop of your car and install a sunroof of your desired color and flavor, right? And on top of it, getting registrations, getting warranties, getting certificates from the authorities, and the checkup of your car health, it's also a super complex stuff. It's time-consuming stuff. It just takes a lot of time to kind of do all these things together by yourself. But I'm not saying that it can be done. It could be done. It can be done. But you need a lot of time. You need a lot of spare parts. And you need a lot of expertise to convert your pieces or a basic car into a car that you need or a car that you want to have all the features, right? And it does not stop here. It's just day one that I was talking about. In day two, you need to renew your insurances. You need to have regular health checkups of your car. You need to clean your car, which I don't like to do, right? And then finally, you have to use your car, you know, you have to go on the driving seat and you need to drive it, right? Is there a better way to do it? Like, so the first question, instead of what car you want, which car would you need? The difference between wants and needs, right?  Like, you know, classic sunroof or interesting driver or insurances or cleaning services, all bolt into a car and you just drive it and use it. So let's segue this from here, from cars to softwares. I mean, I think that softwares are similar to cars. They're complex. They're not very simple, right? And there are a lot of options available in software and upstream community, open source community. There are millions of repositories out there to figure out which tool to use it for your specific requirements. For example, let's say you want to use, you want to build streaming services. You could use a lot of things. You could use NAS, you could use Kafka, you could use MQs. So a lot of things out there. So it's on you and your expertise, what you can do. So can we get something like a black car, a managed kind of service which can help you guys navigate through all the pain of kind of deploying it, managing it, selecting the right configuration and it has to be instantly available. As soon as you click on the button, hey, launch this or give me this thing. It has to be instantly available to you. So this is what Red Hat Cloud Services is trying to do. Red Hat Cloud Services provides managed open shift as the base and providing you managed application services and managed data services on top of open shift. We work with all the cloud providers, Amazon, Google, Microsoft, IBM. It uses open shift as the base layer because open shift is like the multi-cloud hybrid cloud operating system. If it works on open shift, it can literally work on anywhere. So consuming our offerings from open shift offerings from AWS, open shift and IBM cloud and dedicated, these are all managed open shift services. On top of it, we can provide you features that you'll really care about in your app. You don't need to worry about, hey, which repository should I go and clone and then build and then integrate and manage and maintain the security of it, rather just go in and pick up the right tool for your applications. So starting from API first approach using Red Hat, API designer, all of these things that my colleague Jair will want to show you live. So starting from designer, API designer, design the API contract that you like to see even before writing any code for your application. Then using registries to do it, using API management by three scale, you can do it. And if you want to integrate, let's say, streaming services, streaming capabilities in your app, you can use OpenShift seems for Pachi Kafka, which is a managed service. And then all of this could be nicely done in an easy drag and drop fashion powered by the Red Hat OpenShift connectors, which helps you connect X service to Y with just simple drag and drop. And then moving on to next, you definitely want databases. You might be having databases running on Amazon or let's say MongoDB cloud. How can you bring up the database instances, or how can you connect seamlessly to those database instances running on a different territory? So database access provides you that glue to connect to the remote databases from directly within your OpenShift environments. My colleague, Veda, gonna talk about database access in greater depth. Once you also have databases, next would be, hey, how about AML? I want to introduce new features in my app, introducing AML, some data analytics, how can we do it? So you can leverage OpenShift data science, the managed service that we have, which provides you ready to use environments for AML, like building your models, training your model, doing some inferencing over the model, distributing your models, and then using Apache Spark kind of tools for big data analytics. So in a nutshell, these are services which enables you run faster, faster to market. Rather, you go and figure out your own time to deploy these things. You could leverage the managed service offering from Red Hat and get to the market faster. So with that, let us quickly see the Red Hat Cloud services, how they work in tandem, how they work together as a whole interaction. So Jaya, please help us with the demo. Thank you. Thank you so much for making the time today. And it's lovely to see all of you. I'm Jaya, I'm part of the cloud services team. My role as technical marketing manager is a mouthful, but I do a lot of content, demo creation, and do a lot of good stuff with our cloud services that we will see today. And while you're at it, please pray that the demo gods are kind to me today, because everything is going to be completely live. And hopefully, I will also be alive with the end of this session. OK, let us see Red Hat Cloud services in action. Let us see how a customer called Glovex is going to, it's a fictitious retail customer, is using Red Hat Cloud services to be able to do a lot of fun things. Glovex started on an application modernization journey. And that led them to this particular screen that you see here. They moved from Monoliths to microservices. I mean, Burr spoke about microservices being standard now. It's nothing great, right? And then all the good stuff of OpenShift, because all the services are running on OpenShift. And we spoke about GitOps at length. And they have adopted GitOps, and they are in a really good place for them to be able to run their microservices, run their applications, to be able to scale as quickly as they want to be able to go to market very quickly, right? But why do we do all of this? For us to be able to realize more and more business value with what we built. In the end, everything, all the code, is all about business value. The code in our local laptops is of no use, unless it is deployed in production and being used, right? So now Glovex is like, all right. So I have spent so much money. I'm running on OpenShift. I want to do new stuff. I want to be able to add new features. I want to pretty my ride. I want to be able to add more functionalities and features. I want to be able to add new channels. Right now, I have a basic website. I have products. People are coming and buying stuff. That's all good. But I want to build a new mobile app. And then I want to be able to track people how the way they are engaging with my website. What kind of products do they like? What products are they viewing, searching for, adding to the cart? And then based on that tracking user activity, I want to be able to add intelligence to my system so that I will pick up the top 10 products and showcase that, as you know, these are the most liked products. These are my featured products based on what the customers like. And this information will help them to be able to build more personalized experience going forward as well. But there are challenges, just like how Puppy is figuring out how to drive the car. Adding new channels is not easy. The Globex team does not have a mobile team in their own development team. So they would like to outsource that to the mobile development experts. And you have the mobile team. You have the new UI stuff that needs to be built. You have the backend systems, which need to be refurbished, or new backend systems that need to be built. And all of this, we will need to come together. And what's the most complex thing of software development? Any comments? Coding? Sorry? Integration? Sorry, naming products, that's true. It's people bringing all of the people under one single umbrella, making them talk to each other to ensure, no, information is not dropped when I speak with you. I need to speak the language that you understand. And we have people, processes, and technology. The most difficult over here is the people. Because we are the wild card in the entire process, right? So bringing different teams together to be able to work well with each other is going to be a challenge. And how do you ensure that that works well? There needs to be a way that the teams, there are certain levels of governance that's being put in place to ensure all teams are able to speak with each other in the right fashion. And adoption of new technologies, for example, when talking about user activities, tracking all of those events, as soon as we say events, we think of streaming platforms, adoption of technologies, and setting up of the infrastructure, stuff like streaming platforms. It's not easy. It's definitely a challenge in terms of patching, in terms of even finding the right people to come and help you to be able to set up the platform and maintain it, just setting up just one step of the whole thing, right? So technical skills, who know the technology, that is going to be a challenge as well. So they come up with a blueprint. This is a standard, they build a wire frame, an application with all those hearts that represents your like button. I think all of us are very, very familiar with hearts and like buttons here. And that's the next step. When a user clicks on any one of them, they pick certain of those products that they like.  So messages keep flowing, events of user likes keep flowing from WebEx, what am I saying, WebEx for? From the web UI and then going through the services and then flows into your streaming platform. And after that, that data is being analyzed. And some level of intelligence is being derived out of that to pick what are the top 10 or top five most like products? And that is being used displayed as feature products. So this is what the business agreed upon, discussed upon, they built a blueprint around that. Now if the mobile application comes into picture, the mobile applications will also should use the same services, right? We don't want to be duplicating our efforts. But they should be able to access these services in a secure fashion. We don't want to have public access to everybody, right? We need to be ensured that we secure those access. So the teams arrived at a new development approach. The first step being adopting an API first approach. Anybody's heard of APIs? Great. So API first approach is all about identifying the contract first, identifying what is specification gonna look like. Even if you take Java or any software for that matter, the specification is gonna be extremely critical. There's decays or the documentation is gonna be very critical, right? So from adopting an API first approach is defining how an API is going to be structured. Once that has been structured and then mocks are being created out of it, mocks are basically even before the backend teams finish building their services, you are able to simulate as if the mocks are already developed. So that the UX team, the UI team, the mobile team can continue development while the backend team is also developing it. So basically we are able to achieve parallel development streams. And then we need a way to manage and secure those APIs. And they want to introduce an API management platform for that. Then Kafka has been used. I think that is the most popular streaming platform to ingest and process user activity events. And then they'll plan to use cloud services because you will see why they want to use cloud service. The click of button in a few minutes, you'll be able to set up most of the platforms. I wouldn't say all of them, but most of them is very, very quick to go set it up. All right, so spoken so much. A demo is worth, you can continue to count the number of zeros, but many, many zeros, 100 million words. So we will go have a look at the demos. Like I said, we start with an API designer. As you can see right on top, right? We see hybrid cloud console. Now, hybrid cloud console is the entry point for all of our managed services. Through the hybrid cloud console, you'll be able to set up a lot of services. I'm just gonna quickly show you what are all the application data services that we have. You can set up data access, data sciences. You can set up service registry. We'll be talking about almost all of those services over here, okay? For you to be able to access it yourself, you can just go to console.redhat.com, create a user ID, or if you already have a red hat user ID, you can just log in over here, and you can just check it out. The first step is to be able to create a design, the API design. So API design would be click on a create design. I'm going to just showcase an existing pet store sample. You click on create, and this is the sample, right? And so you'll be able to create various parts for an API. This is basically defining how the specification is going to look like, so that later the backend team should not be doing their own stuff, and the UI team is expecting something else. We don't want that challenge to happen. So I have created a product catalog API, one of those APIs, as part of the Globex application, right? And as you can see, there are multiple parts. These are like, for example, on the UR level type, right? xyz.com slash, get me this, get me that. So the multiple part. And then you can also identify what we call examples, okay? So these are real, real, I wouldn't call real, real examples, but these are like, close to real examples of how the response will look like. So this makes it really easy that upfront you're agreeing upon all of this. So as the UI developers, mobile developer, I know exactly what kind of content I'm going to be getting. Or as a backend developer, I know exactly what content do I need to produce? So there is no ambiguity later, okay? Once all of this is done, what we do is that we export this into something called a registry, a service registry. I'm sure the term registry is not new to us, right? A registry is basically a listing of so many things. It's like a home to a lot of content or could be container images. In most cases, in OpenShift case, we would have heard of registries. In this case, we have something called a schema registry. Now, I'm sorry, it's called a service registry, okay? Now what is a service registry? Service registry is a home to all of the specifications that we create so that this becomes like a single source of truth for the entire organization who is working on a particular project. So once a schema has been created using the API designer, you can export that design to a service registry. So I'm just gonna create and click on export. And my service registry, this is my service registry page. I accessed it through the same console.reda.com, service registry, service registry instances. I'm sorry, the internet is kind of slow. Okay, so I will wait for the service registry to come up. Once the service registry comes up, you will be able to see that, you will be able to provide certain content roles. Just give me a second, I'm just gonna try to refresh this page once again. Okay, we'll come back to it when the service registry is up. Once the service registry is done, there are multiple developers who are able to, all of the developers, it could be backend developers, it could be UI who are able to access those APIs, right? API design, I mean the specifications, the specifications that we just saw about creating it and publishing it. And the next step is to mock them so that our developer is able to have a tangible endpoint for them to be able to test and develop against a particular API. There are multiple mocking tools out there. We have Mikrox, we have Postman. I picked Postman here because I think most of us are familiar with Postman, I'm sure, but try with Mikrox also. It's a very easy to set up tool. The easy thing is that you just go ahead and import your open API specification and it'll just create a documentation for you. Once that is done, it starts getting, it appears on the list of collections and then you can create a mock server. All of the, most of the mocking tools that I spoke about, Mikrox or, excuse me, Postman creates what is called a mock server. So it is as simple as, a mock server is very simple, you create a new mock server and say that I want to use it. Existing collection is the one what I had no recently imported, okay? I have done this all of this already. So this is a mock server that I have and now I would be able to use that mock server. This is a mock server, okay? So it gives you a mock URL and this URL is public. As in anybody, it is not just within this environment, this URL is public, you'll be able to use that URL elsewhere. So as a developer, I can just use it as my endpoint till the actual real backend systems endpoint is available to me. And then I use that endpoint and I can just test out these environments for me to be able to get this response. So what does a developer, what will they do? They just copy this URL and use this endpoint in their Java code or the JavaScript code, Angular code, React.js code and so on and so forth. Okay, so something went wrong. Third time lucky, perhaps it's a third time refreshing it. So the product catalog API got imported and you'll be able to see the actual content being made available here, hopefully. From the documentation, you'll be able to see the same catalog, the developer would, from the organization would be able to download that and you'll be able to view the content over here and you can also define certain content rules saying that if there's a new version being uploaded and you can see here, right, you have versions. So you just can replace an existing version with a breaking change. So every time you upload a new version of your specification, it's a new version, okay? So you can define content rules and you can define compatibility rules to ensure it doesn't break or change us already. The next step would be for you to go and secure these APIs for external users. For example, if it is at the same cluster, it's fine. I mean, you can access your internal service, service URLs instead of using external facing routes or internal service is fine. But if you are exposing that to external people, right? For example, in this case, we're talking mobile application or in the future case, a partner may want to start, you know, using your products, displaying the products in there. For example, it could be some sort of Amazon wants to start using pulling out your products and displayed on their website, for example. So there could be a partner team who wants to access your data, could be a mobile team which wants to access your data. So you will want to start not sharing the internal services, right? Nobody wants to share internal services because it needs to be secured. So you start using an API management. Now an API management, I have already set this up. An API management, you would define a user key, something called a user key, which protects you from a particular URL, okay? Now this is how, I think that is, I'm sorry, but that is not something, even if you do a control plus and all of that, I'm unable to make the screen any larger. But each endpoint will need something called a user key. And how will any developer get a user key? An API management, a good API management will have something called a developer portal. A developer portal is a place, people can go and sign up for an API. So in this case, I have John, who's part of the mobile team who's signing up for an API. And once they signed up, I get a key over here, okay? So right now, as you can see, but if I just directly try to access this URL, it tells me authentication failed because there is no user key. But when I start providing the user key, which I obtained from the developer portal, then I'll be able to start using it. Now, what have you done? Created the API. We're able to now hold it in a system of truth on a service registry. Then you're able to mock it. So we have parallel development teams. And then you're able to secure it as well from production perspective. Now it's all back in stuff, right? All that is good. You're basically setting up the groundwork of all of this. But what is it that we really want to do? So developers have built, or you can see the Node.js application running here. Let us see how that looks like, okay?  Burr, you must be able to see your name over there. And we have multiple products and all that is good. Now, we have to start streaming those user legs, the clicking of the user legs. Here's where you're gonna help me, not right now, just give me a few more seconds. To be able to connect to a Kafka instance, I'm just gonna show you something very, very quickly. How easy it is to create a Kafka instance, okay? Like I said, it's all in console.tradha.com, okay? I'm just gonna show that again to you just so you are aware. Under console.tradha.com, use your own login, okay? Click on Kafka instances, and when you click create Kafka instance, let us say, GloBux wants to create a Kafka instance. So you pick a cloud provider at this point in time, because it's trial environment, we provide AWS, but then we also have types with most cloud providers. Then we have the various, you can pick availability zone on a production environment, you would have multi-availability zone as well, and because it's a trial again, it has a single availability zone, we have multiple streaming units, and you click on create instance, and that's it. Of course, we gotta wait for a couple of minutes. I don't wanna keep you all waiting, and so I do not, I already created a Kafka instance. Once you create a Kafka instance, you can very easily import the Kafka instance, a connectivity onto your machine using an operator. I think we already spoke about an operator, so there's an operator who would look something like this. I have set up connectivity from my Kafka instance to where my Java application is running. Now, all of this would look very similar, because we use the same UI on the CSS called pattern flyer, pattern flyer, okay? So all of this will look very similar. So you may be wondering, I'm doing the same stuff in the same box, you know? But then we have the hybrid cloud console, which is all of our managed services. Now, what we see over here is all of my custom Java applications, custom Quarkus applications, services which I know UI running over here. So I have connected my custom Quarkus applications to my Kafka instance, and then this how we do it. So once you click on connect, it picks up on the topics that I have already created. You click on next, and then it helps you to set it up very easily on the screen. So once you do this, you may wondering about, so I have created a Kafka instance for you. Now, there's one thing I want to iterate. All of our managed services are secure for access. What do we mean by that? Anybody know service accounts? Okay, so service accounts is a way for you to be able to protect your resources on a very, very fine-grained level, right? For example, in this case, if you are able to, if you want to be able to provide access to some of these, to the Kafka topic, I have created a topic, multiple topics here. I'll talk about it. You can create, you pick up an account. It could be, for example, any account, and then you click on that, and you can start assigning permissions. So if you can see over here, you can produce to a topic. What's the produce to a topic in sense? You can send information to a topic.  And even within a particular topic, right? You can provide multiple permissions. Is it going to be? Yes, yeah. So that's because there is a custom requirement of what everybody, individual will need, right? The topics will not get automatically created.  And you can just create a topic. So creating a topic is as simple as creating a topic, provide a name, and then it asks you what partitions you want. Message retention in terms of retention time, retention size, is it visible? Okay, and then how many replicas, and then click on finish, and that's it. Your topic is made available to you. And then your access controls can be on the entire Kafka instance perspective or individual topic perspective as well. There's something I want to reiterate again because it's very important because security is of prime concern for all of us, right? So you will be able to provide the right, a level of managed access for the Kafka topics, okay? So I have set that up in such a way that when I created the, this is called a service definition. So if you remember in this page, I had pulled, created a connectivity, right? So I will be able to, you know, just drag and drop each of my service to bind. It's called service binding, okay? I'm able to bind each of my service to the Globex environment. So if you'll be wondering, how will I do this in each of my environments? So as a developer, I want to be able to very quickly bind my service to a Kafka instance rather than worrying about GitOps or rather than setting up all of those other, you know, automation that is necessary for you to be able to do in real life. So as a developer, you can very easily, very quickly drag and drop using the service definitions, okay, and service binding. But in real life, all of this can be used, done using GitOps as well. We have the right APIs necessary for you to be able to automate it as well. But in this case, I just wanted to showcase the other side of things, you know, how it may look like from a developer standpoint. Okay, now all my servers are running. We're all connected to Kafka and my service, my products are all up and running, okay? And if you remember, there is just one quick thing I wanted to show you. In this page, when we're talking about once the messages are, the events are getting picked from each of the developers' likes and clicks and all of that, right? We want to be able to build the top 10 products. How would you do that? There is an API called the API that I have used here. It's called Kafka Streams API, it's a Java API which will help you to aggregate the various data and to be able to produce the top 10 products, okay? And so that is this part of it, okay? The analyze part of it, excuse me. Okay, so if I go back over here, I do have a simulator which can simulate thousands of messages and all of that. But I wanted you all to please open up your mobile phones and help me to simulate the message. So I will have to upfront apologize that it is not very mobile friendly at this point in time but I'll make sure I make a change, okay? So access it and go ahead. It'll show you a list of products. Like I said, it is not mobile friendly but you can zoom in and go ahead and click on those like buttons, yeah? Are you able to click on the like buttons? Oh, yeah, sure. Able to access? Is it coming up? Nice, yeah? Okay, super. So go ahead and click on like buttons, okay? People like Patagonia, some people like the Quarkus t-shirt, water bottle, Cuba, Nettis t-shirt, webcam, awesome. So if you see, the first page had nothing in the front please. Now, all of you helped me to generate that rather than me clicking on a simulator, all of you helped me to generate all of these messages. So all of the messages that you had sent went through Kafka Stream, Kafka Streaming Platform, got consumed by a Kafka Streams application and it crunched all of the data and created a list of messages for me. I will show you how that looks like, okay? We have a few more minutes. Let me go back to the Kafka Streams application, okay? And this is my messaging page. Okay, how many messages have I had? Wow, I mean, how much have you guys been clicking on it? I have like 400 messages, is it? Okay, 10 messages. Okay, any more further clicks? Let us see. So you can see here, right? Each of these messages that you clicked was a payload, which went over here, saying that this is what the product that you liked, what was the local time, whether you have previously visited using cookies and stuff like that, okay? So thank you for your engagement, engaging with us today, cool. Now, you have more topics over here and this topics here are the ones which are actually being used by the Kafka Streams to be able to crunch all the data and pick up the top most product. So the aggregated change log is the one, you can see in the last product, it showcases the top products, okay? Now, that's the end of the demo. What I want to quickly, you want to say something? Okay. What I want to quickly reiterate is, we saw a lot of moving parts. I wonder, I trade, where is everything running? All of the custom applications is running on OpenShift. It could be on-prem, it could be on cloud, could be hosted, it could be on a bare metal, right? Then you have the UI being accessed by multiple users. In this case, it was you all who were accessing this application. Then we have OpenShift API management, the API management platform, which is running on OpenShift dedicated. Then we have all of those services, the Kafka, the designer, the service registry, all of them running on the cloud services. Then I also had Kirod.io, where did Kirod.io come into picture? All of the images of all of the services that you saw is right over there. So all of them come together well to be able to build a good use case for a developer. Now, a great platform should make it easy to do things. A wise man once said, I didn't say this, I copied from somewhere, but I quite like that, you know? A great platform should make it easy for us to build all of this. Don't take my word for it. You could test drive this, okay? You can take a picture of this. I'm sure I'll be able to gain access to this. You can try Kafka using that URL. You can try API management this way. We have sandboxes available for all of them. We have console.redhat.com. You just use your own email address or your Red Hat account to be able to access that. And this particular demo that I showed over here is right over there. That is the URL for it. You can try it out yourself. You don't have to have, don't think it's so hard to have all of these moving parts. You can very easily set it up yourself with all of the tools available. There's nothing else that you will need for you to be able to build it. There are further learning parts available at the end of that. developer.redhat.com slash learn provides you so much more. Thank you so much for your engagement. I hope you guys are useful. So, yeah, we have one of some time. Any questions? Anyone? You have an open source. And what technologies are those? See, in the sense, we are also open source. Right? If I have the same setup hosted in Azure itself and I want to move it on OpenShift and take advantage of these tools. Yes, absolutely. We have migration toolkits. Yes, we have what we call migration toolkits. You can look for Red Hat migration toolkits. We have multiple toolkits available. Right from applications being migrated, VMs, or even moving from VM to a container world, talking about even workloads getting migrated. That depends upon very much on the workload, right? So, we do have good toolkits. Just look for migration toolkits. You may want to just note it down, or it's not a difficult time to remember. And just to, just to add, please continue. Just to add one more thing on this one. So, it depends a lot on the architecture as well. You could obviously move, you know, live, live from one environment to an environment depending on architecture. For example, if you have, if you have to move, like, you know, you can do something like Debezium, which will kind of be the main player, kind of moving the data, thinking from one to another. So, you know, migration is a way to kind of, you need to design the architecture the way your business supports. If you can get a downtime, that's okay. But if you want to move it live, this could also be done. So, since the bits are open, so it could be done, a lot of things. So, moving live from AWS and OpenShift, I don't, maybe that is more possible from an application perspective. From data point of view. Yeah, he was primarily asking about, I think from microservices and applications and all of that, yeah. And he brought up a good point. We didn't have time to cover that. You can look it up called Debezium, okay? The, it is, I'm just gonna show another screen. You can take a picture of that. There are the one over there, it's called Change Data Capture. There's a technology called Debezium which helps you with change data capture, which is really, really helpful. So, we have content, hands-on lamps available. So, please try it out and set us a comment.


Hi, everyone. I'm Henry Dixon, Lead PM with the Azure DevOps Artifacts team. I'm here to help you get started with Artifacts by introducing you to some of our features. Today, I will help us walk us through the following scenarios. First, setting up a package feed to provide our teams with the ability to control our packages and their dependencies. Next, I will then add a task to my build pipeline to upload packages into our new team feed while also describing some of the benefits of having this feed. Finally, I will show how to quickly consume packages from the feeds into a new solution. Let's go ahead and get started with the demo. I've already created a project for my team and I transferred my code into a repository. I've done a couple builds to verify that my code is ready. However, I do have some packages that I want my team to consume so I want to create a team feed so I can control our dependencies. Luckily for me, Azure Artifacts is now installed by default, and then I'll click on New Feed. Input a new team name, Team Feed, and hit Create. This will create a feed for my team to use. They can be assigned permissions to either consume from or contribute to the feed. I'm going to leave the defaults for now, which means that all product members can do both. Additionally, I will leave the default upstream to use packages published to this feed, and I'll touch on that a little more later. I'll go ahead and create it now. Next, I want to add the feed to my list of package sources. So I'll click the Connect to Feed button or the tab in the header. A pop-up is now shown that provides me the URLs that I need to continue. Since the packages I'm creating are Nougat, I'm going to copy this first one and open up my development instance in Visual Studio. Now, as I'm in Visual Studio, I will go to my project. The place where I need to go can be found under Tools, Nougat Package Manager, Manage Nougat Packages for Solution, or I can right-click on my solution and get there the same way. From here, I get a list of packages available from Nougat.org, the default feed for our Nougat packages. However, I want to ensure that my feed comes first and my team gets items from that feed. So I click on the gear icon at the top right, which opens up my package sources settings area. Since I'm adding a new source feed, I will click on the plus sign and give it a name, and then I will paste in the source information into the source field like so. I'll then remove this, the check mark for Nougat.org, because I want the feed to use as primary, and I've enabled Nougat.org as an upstream, which I'll touch on later. Once I do this, I am good to go. Okay. The next step is to run a build and place a package in that feed. Therefore, I can come back to my build pipeline and add Nougat task to push the packages into the feed. This will help update the packages in the team feed as time goes on. I now go back to the Azure DevOps and click on the edit of the build pipeline that I want to change. Again, I'm adding a task. So I hit the plus sign to find a task to add to my build. I search for Nougat and pick the first Nougat task. Since I'm pushing new Nougat packages, I want to move it to a place after my build processes. Then I switch the command to push, and then I update the target feed to the feed I've created for my team. To validate that this works, I can either save and queue, or since I have CI configured on this pipeline, I can wait until I check in a code change. Since I'm eager to validate this for my team, I will choose save and queue. This goes ahead and kicks off a build that I can then see the progress of. While the build is running, I want to tell of the reasons why I'm creating a T feed or even a set of feeds is a good thing. Many of you may be content with just using the default public sources of Nougat or npm feeds at nougat.org or npmjs.com respectively. These are great and we have listed them in our feeds as public upstream sources or public package providers. Without upstreams, if the public site endpoints are interrupted for any reason, DDS, other issues, your build will have problems compiling until the public site returns to functionality. Another example is much more interesting. Two years ago, a popular package was a low-level dependency for many packages in use today. The package owner pulled that package, causing upstream issues for packages listing it as a dependency. Thousands of packages and thousands of builds were impacted by this. In both of these cases, feeds with upstreams enables help developers maintain productivity. A feed will not only host a package you create, but also the dependent packages from the public upstream and stored as a saved copy. So while the second incident caused quite a bit of problems for developers, teams using feeds with upstreams enabled would still be able to use their packages since the removed package would still be resident in the teams feed. Okay. Let's go ahead and check on my build. I believe it's complete. Okay. It looks like my build is complete. So I should be able to go and see the artifacts now within the team feed. Yes, it looks like the artifacts were just published into the team feed. Great. So what we're going to do now is we're going to consume a package, one of these new packages from another solution. So I'll go back to Visual Studio and change to a different solution. So now that I've changed to a different solution, open it up in the solution explorer. Again, I can get there from tools, new get package manager, manage packages for solution. But since I've already been there before, I'll go ahead and right-click and manage my new get packages. Now I see that in the new get package manager, I have the ones that are installed, but I can now browse, select the package source and select my team feed. Now from here, I now see the new team feed packages that are available to me to install. I just need to install my Dixon look and listen. I click on the install and it now comes back into my solution for me to go ahead and go. Thanks for watching this introductory video. We hope this helps you get up to speed with producing and consuming packages and creating package feeds for your teams. While this video targeted new get, we have a ton of information around NPM, Gradle, and Maven packages, with more protocols being onboarded all the time. Please feel free to ask myself or my team questions on Twitter, go to the Azure DevOps website for more information, or look us up on your user voice package management. I'm Henry Dixon with the Azure DevOps Artifacts team. Happy coding.


So, far you have learned what is a formal definition of a language and how to represent them finitely a finite representation. In that context you have learned the notion called regular expression to represent a language. Now, there you have understood already that some of the languages you could represent through regular expression and some of them you could not. So, in this context we will introduce a better tool to represent a language finitely a finite representation. So, in the context we are introducing the tool called grammars as naturally one may expect to understand a language. So, again here the notion of the word grammar is familiar to you and you know the grammars in the context of natural languages. Now, first here we formalize the notion and then we make you familiar with this formal notion through certain examples. First what is the understanding that you have about grammar that is a grammar of a language is a set of rules which are used to construct or validate a sentence of the language that is how we know a grammar that is the expectation that you have. Now, to formalize this notion we have to first look at certain general features of the grammars that we know already from which the important features may be captured and abstracted to formulate the notion of a grammar. So, when you are looking for the general grammars that means in the context of natural languages you may first look it. So, from English let us consider the sentence the boy ate an apple if you question that this is grammatically correct or not. Let us look at this way the article d followed by the noun boy form a noun phrase the article and followed by the noun apple forms a noun phrase and ate is a verb and now if you choose a sentence form S V O so called subject verb object. Now, you can understand that subject or object can be a noun phrase and you can validate the sentence for example, you can validate the sentence or you can verify that the sentence is grammatically correct in English. So, in a as I am showing here you may possibly validate that take the sentence form take the sentence the rule subject verb object then subject you may place by noun phrase and then the noun phrase can be an article followed by noun that rule you may use and the article you place by the article with the and then noun by boy and then verb by ate and in case of object you are choosing now noun phrase the rule and the noun phrase can be article followed by noun and the article here you are choosing an and the noun apple. So, the boy ate an apple can be parsed or can be verified through English grammar in this way. Now, to formulate the notion of grammars first let us see in this context what type of words that we have considered the words like a and the boy book is this kind of words that you have encountered and the words like article noun verb noun phrase this kind of words that you have encountered. So, what is the difference between these two if you look at the second type of words that means article noun verb this kind of things you have to address them further that means if you say noun what is that noun that you are going to talk about. So, you have to tell something about that further and that means these are this is not getting terminated. So, you have to further tell something about this now if you look at the first type that one if you say and the boy this kind of words there is nothing further you are going to say in English. So, that way we may call them as terminals and the first one we call them as non terminals. Thus informally when I am talking about grammars what are the things that you have understood here is a set of non terminal symbols have to be there and a set of terminal symbols and a set of rules. For example, noun phrase can be an article followed by noun or a subject can be a noun phrase this kind of rules that we have used in the derivation. So, a set of rules that you are requiring and now a distinguishing non terminal symbol that means for any sentence what is the main target in a grammar. So, you are going to validate sentences or you are going to derive a sentence through the rules that are existing in the grammar. So, essentially we are targeting to derive a sentence. So, a distinguishing non terminal symbol that you are indicating as a sentence. So, that is to derive any sentence from there. Now, formally we will introduce this is a combinatorial system as a quadruple I am writing here g n sigma p s where n is a finite set you may call them a set of non terminal symbols. Sigma a finite set again a terminal symbols and s belongs to n that means this is a non terminal symbol that we call them start symbol this is representing the phrase sentence. And p is a finite subset of n cross v star the called set of production rules what are the rules that we are here having that they are called production rules and here v is equal to n union sigma. Now, let us look at that set n cross v star here the elements are of the form in n cross v star a non terminal symbol and a string of v star. That means here alpha is a mix of terminals and non terminals a string over mix of terminals and non terminals and this a is a non terminal symbol. So, the rules are essentially pace which are of the form a alpha. Now, for convenience since we are calling it as a rule we write a alpha in this way and call a can be alpha. And now before going to talk about the sentences that are to be validated through a grammar and or sentence which can be derived or generated using a grammar we require certain concepts. So, let us first look at those concepts let us consider a grammar g n sigma p s with v is n union sigma first we define a binary relation that is represented here with the imply symbol with a subscript g on v star. That means we are defining a binary relation on v star v star again I repeat this is a strings with mix of terminals and non terminals. How we are defining this relation alpha related to beta using this relation if and only if alpha is of the form alpha 1 a alpha 2 beta is of the form alpha 1 gamma alpha 2. Here the relation between alpha and beta that for a non terminal symbol a that we are replacing by gamma that means if it is replaced by a production rule then we say they are related. So, that means here and a gives gamma is a production rule in this grammar for all alpha beta in v star. Now, the relation this is called 1 step relation on g because by applying 1 rule from alpha you get beta in 1 step. So, we call this as 1 step relation on g and if alpha gives beta in 1 step we call this alpha yields beta in 1 step in g. Now, another notation here this relation with a superscript star if we write that is the reflexive transitive closure of the relation 1 step relation that we have defined. That means if you take any 2 strings alpha beta in v star we say alpha related to beta with respect to this reflexive transitive closure of 1 step relation if and only if through finitely many strings these 2 are related that means there exist a number n greater than or equal to 0 and strings alpha naught alpha 1 and so on alpha n in v star such that this alpha naught is alpha and you can you can get in 1 step alpha 1 from alpha naught and so on alpha n you will get it from alpha n minus 1 that alpha n is beta. So, that means essentially this reflexive transitive closure the relation reflexive transitive closure is by through finitely many steps of 1 step relation you are relating 2 strings. Now, for alpha beta if these 2 are related through this reflexive transitive closure relation that means through finitely many steps if you can get alpha beta from alpha then we say beta is derived from alpha or you can say alpha derives beta further this expression alpha gives beta in finitely many steps is called derivation in g the notion of derivation is introduced here formally. Now, if you consider a derivation that is alpha gives alpha 1 in 1 step alpha 2 in second step and so on alpha n that is beta if this is the derivation then the number of steps in this will be counted and say that is the length of the derivation. In this case you can see that here are n steps and thus we call the length of the derivation is n and in which case one may denote by taking n in the subscript superscript of the relation. Now, let us have this convention because every time we are using this subscript g in a given context if you are handling with only one grammar g then you may simply use the symbol implies instead of using this implies with a subscript g. Now, if you consider a derivation alpha gives beta infinitely many steps then we also call beta is an yield of the derivation. Now, if you take a string alpha in v star we call this as a sentential form if that can be derived from start symbol s. So, in the grammar under concentration you have start symbol s from which if you can derive this string alpha then we say this is sentential form. In particular if this alpha is only with terminal symbols that means if it is an element of sigma star then that sentential form is called sentence. In this case we say alpha is generated by g and now we formally define the notion of language generated by a grammar g. The language generated by g denoted by l of g is the set of all sentences generated by g that is l of g is set of all x and sigma star those terminal strings which can be derived from the start symbol. Now, if you look at an arbitrary rule in a grammar that we have defined it is of the form a gives alpha or a goes to alpha. If you consider the sentential form that means this string x 1 and so on x k a x k plus 1 and so on x n if this is sentential form that means this is derived from the start symbol. And as this is a goes to alpha is a rule by applying this rule in the sentential form you can get a next step which is of the form x 1 x 2 and so on x k alpha x k plus 1 and so on x n. Now, in this sentential form the replacement is independent of the neighboring symbols of a because the production rule is of the form a goes to alpha wherever a is occurring you can substitute a by alpha to get a sentential form resulting like this resulting like this. Now, as this replacement is independent of a one may call a is within the here you observe that first the non-terminal symbol a one may say this is within the context of x i's the neighboring symbols x 1 x k the neighbor symbols of a are say for example, here x k x k plus 1 or if you go little more x k minus 1 x k x k plus 1 these are the neighboring symbols of a. Now, when one may call a is in the within the context of x i's depending on the neighboring symbols that you are considering. Now, hence the rule a goes to alpha is said to be of context free type the reason why when we are substituting a by alpha we are not worried about the neighboring symbols of a. And thus this rule is called context free type and that the type of grammar that was defined. So, now here we call them as context free grammar or simply c f g context free grammar. Now, the notion of context free language is as follows a language a is said to be context free if there is a context free grammar g that generates l that is l of g is equal to l the language generated by g should be equal to l.  Finally, many rules and left side only one non terminal symbol is only one non terminal symbol is there and right side mix of terminals and non terminals are allowed here we are considering only terminal symbols. For example, here a b and b b here a b a here a a b here finally, many rules are under consideration.  Let us look at another derivation s derives a b by using the second rule s gives b sorry s gives b b you can derive the terminal string b b in one step again. Similarly, s derives a b a you can apply third rule within one step you can get the terminal string also s derives a a b and can we have some other derivations in this grammar. There is only one non terminal symbol you will start from the non terminal symbol a and you have to apply one rule to get the next string sentential form in a derivation under consideration. The possibilities that you understand here you may apply the first rule or second rule third rule or fourth rule whatever that you are applying for example, if I apply first rule s gives a b then after that to continue this derivation you require a non terminal symbol on the in this and there is no non terminal symbol here and thus you cannot continue this derivation by starting with first rule. If you want derivation with more than one step for example, if I consider the second rule s gives b b you have the similar situation because right side immediately you have got a terminal string similarly, third third rule or fourth rule because every rule here essentially is of the form x, s goes to say some x where x is in sigma star a terminal string. I do not have option to continue a derivation further and thus here you can understand that any derivation in this grammar is essentially can have only one step and in one step here you can generate a b or b b a b a or a b. There are only four strings that you can derive here thus you can understand that the language generated by this grammar is containing precisely four strings a a b b a b a a a b and these four strings can be generated to understand that this set is equal to l of g every string in this set can be generated by g as we have shown derivations here and these are only strings that can be generated in this grammar thus the language generated by g is this. Let me consider another example by extending this notion whatever the example we have defined here in the previous example once again here we have considered four strings and this is the grammar we have defined now if you take any finite language you have finitely many strings in that say l equal to x 1 x 2 and so on x n finitely many strings are there.  So, here the notation what we are introducing here is in the earlier case s goes to a b is one production rule s goes to b b is one production rule what the notation we adopt instead of writing two rules separately when the non-terminal symbol left side is both or having s we may write it as s goes to a b or b b this is how we read and in the present context when you have finitely many strings x 1 x 2 x n the finite language by considering the production rules s gives x 1 r x 2 and so on r x n there are n number of rules by considering we can generate the language x 1 x 2 x n. Now here one more notation that we are adopting namely if you are given just set of production rules in this set this context s goes to x 1 r x 2 x n we are not giving what is that quadruple for the grammar we may not specially specify whatever the non-terminal symbols that are occurring in this set that you can consider in n for example, if you have here only one non-terminal symbol and sigma whatever the terminal set under consideration and production rules are defined and the start symbol s is in order from non-terminal. So, using this notation just by stating the set of production rules one can always write the quadruple g and thus using that notation I am simply stating note that the c f g singleton s sigma p s generate the language l. Now, let me give one more example consider the c f g with precisely the following production rules 1 s gives 0 s to s gives 1 s s can be epsilon. Now, we observe that the grammar g generates 0 1 star here I am not stating the quadruple only the production rules are stated if one is interested to write it is easy in this context you have again only one non-terminal symbol terminal symbols are 2 0 and 1 the production rules are stated and the start symbol s you consider and thus the quadruple g is this in the present context. And if I call the grammar g we observe that the grammar g generates sigma star here sigma is 0 1. So, all the strings over sigma can be generated in this using this to prove this first what are all the possible strings that you can generate using this using this rules that we have to evaluate. First of all can we generate some string through this rules that we have to understand for example, using the third rule s goes to epsilon one can clearly generate in one step the empty string epsilon or if you consider the first rule you can get this 0 s in one step. And if you use the third rule then 0 epsilon that is equal to 0. So, the string 0 can be generated using this grammar that means you are generating certain strings through this rules similarly by using second rule one can derive one s and applying third rule you may get simply 1. So, 0 can be generated one can be generated if you want 0 0 to be generated consider the first rule once you can derive like this. And then you apply once more the first rule you can generate the string 0 0 s now if you apply the third rule 0 0 epsilon the empty string epsilon that is essentially 0 0. So, 0 0 can be derived and you understand here through this rules the three rules s goes to 0 s s goes to 1 s s goes to epsilon you are deriving certain strings. And whatever the terminal strings that you are deriving they are over the set 0 1 and thus first you understand whatever the strings that are generated through this grammar the L of g is a subset of sigma star because sigma star is the set of all strings over 0 1. And thus L of g is a subset of sigma star conversely we have to understand that every string of sigma star can be derived in this grammar take an arbitrary string x in sigma star. If it is empty string using third rule in one step you can derive it otherwise if you write it as a 1 a 2 a n where a i either 0 or 1 some n number of n length string if you consider. Now, this a 1 a 2 a n we can derive as shown below this a 1 can be 0 or 1 if it is 0 then apply rule 1 to get that s gives a 1 s if it is 1 then you can apply rule 2 to get 1 s here. Similarly, to derive a 2 there either it is 0 or 1 as discussed here if a 2 is 0 apply rule 1 to get a 2 s here if a 2 is 1 apply rule 2 to get a 2 a 1 a 2 s and continue this to get a 1 a 2 a n s. And at the end apply rule 3 and nullify the non terminal symbol here to get a 1 a 2 a n that is what is x. So, any string x a 1 a 2 a n can be derived in in n number of steps you are getting a 1 a 2 a n in the first step you are getting a 1 in second step you will get by that time of second step you get a 1 a 2 and following s and in n number of steps you are getting a 1 a 2 a n s and in n plus 1 step you can nullify this s by substituting empty string and thus you are getting a 1 a 2 a n. So, this n length string that you are deriving we are deriving here in n plus 1 steps the length of the derivation here is n plus 1 and an n length string can be derived here in exactly n plus 1 steps. And thus you understand that any string over sigma star can be derived to the grammar hence x is in l of g. So, we have got the reverse inclusion and thus l of g is sigma star. Let us consider one more example if you consider the language m t the language m t or any alphabet you can consider we can say this can be generated by a c f g how do you give the grammar I give you one method here. If you consider the grammar singleton s sigma p s where p is empty the set of production rules we did not put any restriction we simply said that this production rules is a subset of n cross v star where v is sigma union n there is no restriction on this it can be empty set also as a subset being a subset of this. So, if you choose the production rules to be empty then we are not going to derive or we will not be able to derive any string this grammar. And thus the language generated by the grammar g defined here is empty or if you want some production rules you can follow this method to if you consider the grammar in which each production rule has some non-terminal symbol on the right hand side some non-terminal symbol on the right hand side on each production rule. So, what is the situation that you get that means say finitely many production rules that you would have let me take for example, a goes to say alpha 1 a 1 goes to alpha 1 a 2 goes to alpha 2 and so on some finitely many rules a k goes to alpha k finitely many rules. And the assumption here is each alpha i has some non-terminal symbol some non-terminal symbol on it is right hand side. Now, you start the derivation you may start with the derivation what is the start symbol yes if start symbol is equal to a i for some i here you may get that alpha i. And then in alpha i what is the non-terminal symbol is appearing and we will continue to some a j you substitute that and you are getting some string beta where beta is obtained from alpha i by substituting the non-terminal symbol that you have. Say for example, you have a j in alpha i that means alpha i is of some alpha 1 alpha 2 and by substituting what is the beta I have got is alpha 1 a j substituted by alpha j and alpha 2. And clearly as we as per our assumption let me call it as instead of writing alpha 1 alpha 2 which I have used here already. Let me call it as alpha dash say alpha double dash what we have got beta is alpha dash alpha j alpha double dash. And in beta you can clearly see that there is at least one non-terminal symbol because alpha j has a non-terminal symbol. Now, there may be non-terminal symbols in alpha dash and alpha double dash also. Now, since you see in alpha j there is a non-terminal symbol for example, if you choose and substitute and if you if you continue like this every time you are observing that there is one non-terminal symbol in each step that you are continuing to. So, you are continue to have non-terminal symbol always in each step and thus any derivation that you start with it will never terminate. And thus no terminal string can be generated using this grammar and thus this CFG with this property you will derive only empty set. So, thus you understand that in a either case if you follow method 1 or follow method 2 the grammar under consideration generates the language empty. Let us look at some more. So, for what I have considered here I gave some grammar and understood that the language is generated by those grammars and now in case in the previous case I have considered empty language and given an appropriate grammar to generate empty. Now, let us consider this because what are the examples that I am starting with they are already known to you that they can be represented by regular expressions because the finite set with 4 strings you know the regular expression of that and finitely many strings that is a regular language sigma star that is a regular language and empty this is a regular language. Now, one more here in the consideration you know this is also a regular language and as we are defining a context with grammar for this languages we are also observing that these languages are context free. So, a typical string in this is having k s it can be empty string 2 s 3 s and so on a power k. Now, for this purpose if you consider anyway you require 1 non terminal symbol as a start symbol let me call as I said s I have to derive a. So, let me take a and I should be able to further continue. So, because I am going to produce only s. So, if I consider the rule s goes to a s I can have this kind of situation s gives a s and using the same rule I can derive 2 s and again apply the same rule you can get 3 s because this s substitute by a s using this rule and if you continue this you can produce n number of a s after n steps. If you want if you terminate this by substituting s goes to epsilon the empty string then you can terminate this that is what is a power n and you observe that by considering these 2 rules s goes to a s s can be a epsilon. I can clearly see that in n plus 1 steps you could generate a power n thus if I consider the grammar with this production rules that is I am not going to write the quadruple as I said you can consider this non terminal symbol and terminal set in singleton a and production rules are stated here.  So, let g be the grammar with this following production rules the claim now is the language generated by this grammar is and as you understand here that what are the strings that you can derive using l of g that first we have to look at and if sigma is singleton a under consideration sigma a singleton a under consideration what is sigma star what is sigma star this is precisely a power k such that k greater than equal to 0. And one can observe that whatever the strings that you are generating in this grammar is a subset of sigma star as discussed earlier. Now, to show that any string of sigma star can be generated we can look at the previous example and quickly understand that we have considered by taking sigma to be singleton a. So, thus you are understanding that l of g is equal to sigma star. So, what is the point here is we are treating by considering sigma to be singleton a as a special case of the previous example. And thus you understand that a power k k greater than equal to 0 this is context free because if you consider sigma to be singleton a this is what is sigma star. Let me take let me discuss one more example this you have not seen as regular earlier the language a power n b power n such that n greater than equal to 0 a power n b power n such that n greater than equal to 0.   So, here let me put the correspondence like this and similarly here this a is corresponding to this b and second a is corresponding to second from the right side suppose if you give this correspondence then you can think of the production rules that can generate this language because in each step because we have to remember that a and b are having this kind of correspondence. So, if I write the production rule like this ferrude the production rule like this and this production rule if you keep applying in each step you can generate left side n number of a's and similarly corresponding to each a right side n number of strings. Let us look at a derivation apply this rule to get a a's b and you have I have written only one rule. So, you have the choice of applying the same look that 2 a's sorry here it is b 2 b's are generated.  Now, these 2 strings this sorry these 2 rules can generate any string of this language and conversely any string of this language any string of this language let me call l can be derived through these 2 rules. Now, if you consider grammar with production rules as defined here a's goes to a's b or epsilon the grammar with this production rules. You can observe that the language generated by the grammar g is l a power n b power n such that m data is equal to 0 you can take this as an exercise. That means, what you have to show a string generated in g is of the form a power n is of the form a power n b power n that is in l and if you take any string in l that means a string of the form a power n b power n can be generated through g. So, prove this as an exercise let me give let me discuss some more examples or any alphabet if you consider the language x power r what is this language all those strings in sigma star which is equal to its reversal that means, the set of all palindromes if you consider this the previous example the concept of previous example can be used to define a grammar for this language. For simplicity let me consider sigma to be a b from that you can understand to give a grammar for an arbitrary alphabet sigma what is the situation here if you take any string x in the language l here let me call l for this language the string x what is the form a 1 a 2 and so on a n there are 2 cases 1 there may be even number of symbols here this is of even length there may be of odd length odd length if it is of even length what do you have a 1 it is of the form a 1 a 2 and so on a k let me write and then there after a k plus 1 they are say b 1 b 2 b k it is of length 2 k n is equal to 2 k and if it is of odd length I may write it as a 1 a 2 a k a k plus 1 and then let me write say b 1 b 2 b k let us write like this this even length string this is odd length string here n is of the form 2 k plus 1 this is the length. Now, look since it is a palindrome the symbol a 1 should be equal to this b k a 2 should be equal to b k minus 1 and so on this a k should be equal to b 1 in case of odd length the same situation either side and a k plus 1 can be anything between a and b. Now, you can think of production rules for the sigma set of a b and give a grammar which generates palindromes try this as an exercise try this as an exercise and hence you can extend this for any arbitrary alphabet sigma.


Good afternoon. I'm Misela Renado from the apps team. Yeah, okay. I'm a wild tester there as well as I give support. I'm gonna talk about including the Moodle app on your organizational processes. This is a really long title just to tell you just don't forget about it. This is the team. Some of us are around, so go and say hi. I'm aware that you are in a mood, that you are attending the presentation of the app, so probably you are already using the app. These are just suggestions, some ideas that I hope they'll be useful for you. I'm gonna talk about some essentials rewarding end users as well as organizational processes. And I will be a summary and at the end there is a time, but then we'll read questions. We will talk about user expectations as well as how to access brief notes on plans on accessibility, some comments for teachers, as well as who should they contact for help, for support. After seeing and reading and replying to a lot of tickets, a lot of reviews, I think our users, ours and yours, expect to open the browser and just see their courses there and open the app and just see the courses there. It's more complex than that because you have your own LMS with certain version in your own infrastructure with maybe a firewall, your own certificate, single sign-on and so on. You probably have installed several plugins and maybe you have already some custom code. It's preferred not to but and this connects to the standard model app, which is connected to thousands of other LMS with different versions. So it's much more complex than what a student expects. So how to access? This is what the student can see when they log in, which is pretty obvious. It's the login of Moodle and your site.  It is even and it helped there for them, but actually some users don't know what to type there. Some just go blank and send us an email. On Google Play and the App Store, we need to introduce the developer mail and that's us. So they send an email to us, confusing you and us all the time. There is also people who introduce the wrong URL. You have probably a URL for your institution, a different one for the students, for the employees portal. Some decide to just introduce their mail and expect some likes or more. People introduce numbers, which I can assume there are four numbers, student IDs, who knows. Then there's people who manage to log in and then they see an error message they don't understand. And then again, ask for help. And I'm going to mention briefly because I know Juan has mentioned the plans already. So just to mention that there's the free, the premium plan. There are several limitations and features, but the important ones, at least for me, are the push notifications limitations, as well as the login courses. The slides are on the website, so you can find the information there. Regarding accessibility, just to mention that the app is accessible. It's ready for the voiceover, the talkover, but the content is on your site. So you need to adapt it and be sure it's ready. Some notes for the teachers, just to mention, sorry about that, that teachers and structures trainees can do some things with the app. They can create an assignment, introduce some notes, but the app focuses on empowering the students. So that's their purpose. It's the purpose of the app. So as Gerard was mentioning, it's better to plan for using the app. So some things need to be configured on the course, so they work offline on the app. And then there's some plugins that they may not work on the app. And if that's the case, just go and talk with your site admin. Another request we have a lot of time from our users is to have a way to know when something changes on the course. If you have an old LMS, I would suggest to use forums messaging. If you have a current one, we have the send content change notification at the end of the configuration that you can select. And then when you save it, it's going to be send a notification to users who has access to this activity or resource. This is not a way to spam all users. This is just for big and important things. It's not that you found the misspell there. It's more like, I don't know, you are changing the date of the exam or you are already in a chapter or the late in one. Important things. So now a big question should be this one. This is a bad joke. Okay, the image is there at least. Who are you going to call when you need help? It's a reminder that we have the party later on tonight. So the correct question is, whom should I contact for help? I was checking the other day for this presentation and 95% of tickets that we receive from end users, we cannot help them because they are issues regarding access or they are side issues. So your users or users don't understand the difference between you and us, between your organizations and Moodle. But actually there is a big one which is you can help them and we cannot. So it's important one. So the answer to this question, you can guess it's you, well, your organization. This is just a personal note because I know that probably you have a support email or something like that but sometimes it's better just to think like in a magical word for a second and I will love that the student will talk to their teachers if the issue is related to content. And if the teacher cannot solve it, then they talk to the site admin. If it's something different, if it's an issue with the plugin, then the student teacher can talk with the site admin and they can talk with the maintainer of the plugin and so on. So how you remind users how to access, how to contact you. There is the sticky blocks, just add a block on your LMS and make it available everywhere on your site. Then if you are trained to promote the app, the use of the app, enable ad banners as well as create your own download page. In that way you can student access the site on their mobile on the browser and they see a link there that they can open your website and there is the information you introduced. So there is there the how to access, the login and the information how to contact you. If a recommendation is to update for our own words where is the contact support tool there, you can introduce there your support email or your ticket in system there. So if you found an issue, we'll be happy to receive the information if you're using a vanilla Moodle site connected to a standard Moodle app and you're sure it's an issue, just open it on the tracker, check first that it's not open already and if not, you can contact us using the forums. And it's not just us, it's the community reading. So if you have a specific issue with a theme or something, maybe somebody else can help you. Just again, a personal suggestion is that you are really specific and really clear on what your issue is. Make sure if it's which version of elements you have. It's happening only on iOS or on Android, it's happening both. If it's a content issue, it's a video, it's not been shown. Have you tried on a browser on the same demo while? Because maybe it's just a device issue. And then if you add the screenshots, just help us and send them in English so we don't have to just guess what's going on there. So, organization of processes. I'm gonna talk about what to check and when to check it. So, this is a bit long, but we tell people to check the day-to-day of a student to log in using the app, to browse different courses, to enter one of the courses, to browse the content, to message somebody, complete an activity, so on. This is probably the 80%, 90% of the time of your users. So, do this, check that everything works, as well as do the important parts. Check the exam, check the quizzes, the assignments, the important things they need to pass those courses. So, would suggest a couple of students enrolled in typical courses. You might decide to check a different screen size. So, if it's a small and a tablet, for example, and to have an iPhone and another tablet. For teachers, we recommend that they log in using the app and revise content, videos, forms, try the quizzes, revise plugins, and so on. And there is a documentation regarding creating more and friendly courses. That's really helpful for site admins and IT departments and so on. When it's the same test, it's just that when you are logging in, if it's successful, you manage to log in, it means that your certificate is okay, that there is no redirects, that the authentication you're using are working correctly, that the firewall is letting the app access it, and that if there is no message telling you version.php something, a plugin name, that your plugins are correctly installed or uninstalled, which is important. Once you access, you can check remote themes, as well as revise content, videos, scams, and so on. I added an initial checkup. It's not in this version, but check push notifications too. This is more like for the initial time you are gonna start using the app, also for the people who had to open the access to the app using the pandemic. That's probably where in a rush. So it's a good opportunity to stop for a bit and check it. So try to, the important part is the previous slides, but in here, try to look for a similar look-on-fill. If you have corporate colors, use remote themes, so the app has a similar look-on-fill, if you are not using site home, disable site home on your app too. Some of these things depend on the plans, so I'll double check that. When to check up? The thing is, there is a part that's come from the calendar. It's a part that come from your site and it's a part on the model site. So for teachers, it's more a calendar thing. So at the beginning of the course, if possible, before starting the course, before exams, check the important things that the quiz is working and so on. For site admins, IT department, so on. You are already test the SSL, the firewall, again, all this. And I'm adding that when you are updating your LMS version, you probably have a staging site. Connect that site to the app and check that everything works. Once you update your production site, double check again. And another thing to take into account is, if you are changing your URL for any reason, because your URL, you are using the year because you are merging with another company, tell your students, tell your users, because they need to log out, and log in again with a new URL. If not, they are like in a zombie state, moving around, being able to access to what they already previously download, but when they try to post a forum or something, they receive an error message saying that the app cannot connect to the server, but the app doesn't know that you have changed the URL, so that's something to take into account. So the other side is when model updates. I know Mari already showed some statistics that most people don't update until like three months later or something like that. In October, we will, the release of 4.3 and you may say, okay, so what? Because I'm not gonna update my site yet. The thing is, we are gonna, so some weeks later than the release of the LMS, the app teams just released the new version, meaning that your users are gonna update their model apps on their devices. So now you have a new app that you haven't tested yet. So our suggestion is that you download the beta app first and check it if you find any issue. The check-in is again the same testing we mentioned before. If you find any issue, you can give us feedback. We take that in account, and once we finish the beta, we test the beta and we finish the RQA testing. Noelle is gonna talk about testing tomorrow morning. We release the new version of the app. If you didn't have time with the beta, then it's the perfect time to test the new version. So I'm just gonna sum up and connect a bit what I explain. It's important to remind users how to access and who to contact, especially during onboarding at the start of the semester and so on. We mentioned already on your LMS, you could add a sticky block and things I mentioned before. I want to add also to use forums, to use the mail. I don't know if it still sends physical letters, but if you do go for it, just a reminder for them. I will remind them also about how to use the browser, how to connect to your site using the browser because I think this learning is becoming the new, the dog ate my homework thing because when I talk with them sometimes, it's a bit, I cannot do the exam because nothing is working, it's okay, but it's important for you so you have to find a solution. So for teachers, again, just suggest them to check their courses. Probably beginning before the exams. Site admins, it's your site, the updating and changing the version, the firewall, the certificate and so on. And on our site, when we're gonna update, it's again another time to do so. So time for questions. And you can find us in the moodle stands. Thank you.


Moving on to sports, Britain's Andy Moray said he is not offending anyone by continuing to play despite his injury problems and has extra motivation. From seeing Swiss great Roger Federa still competing, Moray 34 returns to single action for the first time in three months at Queens this week after a groin injury. The squad says he is not perfect but he is happy with the way he is practising. For me it's all physical stuff, like if physically I feel good that's a big win for me because I do believe that if I can get a period of time on the court and matches and stuff that the results will be okay and yeah so that's my priority for this week is to physically feel as good as I can. I've been training a lot over the last few months, there's not been many weeks where I've been off the court, it's just been managing the issue I've been dealing with and tennis wise I've been playing well in practice but I can't say with any great certainty any more that physically I'm going to feel great in matches because that hasn't been the case the last 9-10 months really so yeah I hope that I feel good physically on the court and I'm sure that my tennis will be fine it has been in practice I just need my body to hold up.


How's everyone feeling today? I know I'm sweating like a point guard, being face guarded by Raven Johnson and Breezy Hall, but I'm gonna thank you for being here to recognize perfection. They say nobody's perfect, but this team was. They were perfect on game day, 38 straight times.  From Paris to Cleveland, nothing but perfection. Who says you can't win them all? At this time, I'd like to introduce the City of Columbia Mayor, the Honorable Daniel J. Reckonman. Good afternoon, Game Cognition. What a beautiful day. Thanks for sticking it out. This has got to be a record crowd. I don't know that we've ever seen this many people downtown. On behalf of City Council, Ed McGow, Will Brennan, Tina Herbert, Audity Bustles, Peter Brown, Tyler Bailey, and our City Manager, Teresa Wilson, we welcome you to the celebration of our national champions, South Carolina. Welcome, Mr. President, Congressman Clyburn. I also would like to recognize all the elected officials here, mayors, Richland County Council, our state senators and representatives, sheriffs and police chiefs, please stand up and be recognized. Also want to take this time to really give a big thanks to the city staff for bringing this wonderful celebration to life. Thank you. The South Carolina women's basketball team brought the university, the state, the city, and its fams an unbelievable season. SEC champs, national coach of the year, topped off with a national championship, not only with grace, honor, grit, but with integrity. We as a Game Cognition love you all for what you have accomplished, but more so for who you are. My friend Patrick Davis, a fellow alumni, wrote a song called Numbers. And most of them mean nothing, but some of them mean everything. So let's talk about some numbers. Let's talk about 38 and 0. Let's talk about 3,247 points scored, an average of 85.4 a game. How about 1,761 rebounds? 102 assists, 332 steals, 297 blocks. And most impressive, the average attendance of over 16,000 people. I think for me as a girl dad, I look out and I saw 18.9 million people watch the national championship game for women's basketball. Probably what topped it off, which was the cherry on the Sunday there, was our very own alumnus, Miss Boston, sitting at the ESPN desk. So when I was growing up and young on Saturday mornings, there was a show that came on. It was called Schoolhouse Rock. And our fellow alumnus at South Carolina, who do you the blowfish incorporate this into their songs during a live show? But it taught us the most important, the most magical number is 3. So 3 is a magic number. Let's stand up and let's cheer for our national championship magic number 3. Welcome to the stage. Congressman James E. Clyburn. Congratulations. Mr. Mayor, Mr. President, Mr. Athletic Director, to the whole Gamecock family, thank you so very, very much. I've always been proud of my home state. But I have never been more proud than I was sitting in Cleveland in that arena watching all those people on the floor where their sentiments were, sitting with some people who were a bit nervous in the first part of that first quarter. And then they showed a picture of Coach Staley and she was not moved at all. I said to myself right then, we got this. In this great state, mixed in accomplishment, I tried to enter it into the proceedings of the House of Representatives into our congressional record. On this past Thursday, I was proud to stand with the other members of our congressional delegation and make a congratulatory comment on the floor of the House, and we entered into the congressional record my feelings about this great team, this institution, this city, and this state. And so I'm going to present today to all the coaches, all the players a copy of the congressional record of Wednesday, April 10th, and you will find your accomplishments in the proceedings of the State House of Representatives. And then each one of the players and the coaches will get a personal letter from me. Most of it is solid generic, except I've gone through each one of them and I've found a way to personalize a part of it. And I'm going to just read one little sentence in the one that I sent to Malaysia.  And so when I wrote this letter to you, I said, in addition to the win, you have made your team, your university, your family, and the State of South Carolina very proud and of course, all of us who live in the Greenview community. And now please welcome University President Michael Emeritus. What an unforgettable, perfect season. And I know many of us were thinking about it at the beginning of the season, but we were not so sure about it. And yet, here we are. Here we are celebrating today. Celebrating excellence right here. Celebrating success right here. Celebrating world-class talent right here. But also, celebrating right here, hard work, commitment, tenacity, teamwork. And we are celebrating the family environment that these teams created and protected. I'm so very proud of them. And of course, we are here also to celebrate the great leadership of Don Staley. Some people call it dynasty. I don't know what's the right word, but I know that you are building an empire. Thank you. This is a great moment in the history of our women's basketball program and athletics, but it's also a great moment for USC. It's a great moment for the city of Columbia and it's a great moment for the state of South Carolina. Whenever I go and whomever I talk to, they want to hear more about this team and how they did it. And I'm delighted to give them all the details, from Paris to Cleveland, until they stop me. So thank you, team. Thank you, Don. Thank you all of you for being here with us to celebrate and keep in mind that we're only six months away from the first game of next season. Please welcome our athletics director, Ray Tanner. Thank you, Brad. A few months ago, when this journey started, many people around the country weren't sure what the 2024 edition would be for Coach Staley's team. We all knew that it was a very talented five-star group. We knew that Don Staley and her staff are the best in the country. A relatively new team, a lot of people weren't sure where we would end up. We didn't think we would lose very many games. The last time I checked, we didn't lose any games. It reminds you that you make such a difference for these young women and our coaching staff. We know that 16,000-plus field colonial-life arena, and there were lots of games where quite honestly, we weren't threatened very much because of how good they were. But the times that we did get threatened, you made a difference in the outcome of what happened. You inspire this team. Of all the accolades that this team enjoys and should enjoy for six months to come, every team has an identity, the 17 champions, the 22 champions, and this team. For me, what stands out most about this team are two things. How selfless this group of young women were in today's world. How selfless. And as we all know, on any given day, there was another star, and nobody cared who got the credit. Please give it up for the 2024 national champions. Ladies and gentlemen, help me welcome home your South Carolina Gamecocks and the Mayor to present each player and staff for the proclamation. We'll start with the student-athletes in numerical order. A senior guard from Oceanside, California. Number zero, Tejna Pau Pau. And number two, Ashlyn Watkins. Tessa Johnson. A senior center from Brazil. Number 10, Camilla Clark. A junior forward from a senior center from Columbus, Ohio. Number 35, Sakeema Watkins. Your coaching staff. Assistant coach, Khadija Sessions. Assistant coach, Winston Gandhi. A little bit, so I just want you all to know, we just declared the month of April our national champion women's basketball month in Columbia, South Carolina. So on April 7th, 2024, South Carolina women's basketball secured the NCAA national championship against University of Iowa with a perfect season record of 38-0. The program's third national title, all three titles coming under the leadership of coach Dawn Staley. South Carolina women's basketball team is made of a powerhouse team whose commitment reflects in their stellar talent. The Gamecocks were the tenth team to finish a season undefeated national championship and led the country in attendance for women's college basketball games for non-straight seasons. The Gamecocks' victories are bigger than basketball.  For that, we thank you. So on behalf of myself, the mayor and fellow city council members, we declare April is the University of Carolina Gamecocks NCAA women's basketball national championship month. But to be quite honest, what do you do with coach Staley? We named the street after her. We given her the key. We got a proclamation. We got a statue coming. You know, what do you do with a coach being named coach of the year four times? The coach of eight-time SEC championship team, the first African-American head coach men and women to win the national championship. We do for a fashion icon. We get her something new for her fashion, a new accessory. Team Tina Palpao had something to say. Gamecock Nation. On behalf of my team and I, first and foremost, we got to give all the glory to God. We want to be national champs. We want to be undefeated. We just got to thank him for giving us a healthy season and bringing us through this long season. And second, we just want to thank everyone who supported us throughout this journey. We want to thank our fans, you guys, and especially our coaching staff who brought this group of girls together to love each other, play selflessly, and just compete in that fun with each other. And lastly, in the words of Raiden Crockpot Johnson, it's time for a repeat tour. And now please welcome your coach, Don Staley. Thank you. I'm sure I'm going to miss out on telling, you know, as many people that deserve to be thanked, okay? I want to thank our mayor. I want to thank, you know, all the councilmen and women who put this special parade together. I also want to just congratulate all the people that were a part of the parade. I know we had some bands from Kenan. We had the band from Cardinal Newman. And we had some other people that really needed to be celebrated. So thank you. And everybody else that played a role in blocking the streets and just giving us an opportunity actually to love up on you.  Give yourselves an applause. I saw a lot of uncommon favorite t-shirts. And I don't know if everybody really understands what uncommon favor is. I'm going to sum it up because I grew up in a household where I had to be disciplined, right?  Quite simply, after, after we planned to be here last year during this time, it wasn't harvest time. It wasn't. And it was a devastating loss to all of us, all of us that were a part of it. And I was hurt, deeply hurt, deeply, deeply. Not to destroy my faith, but I did ask why. I did. And most of us that really understand, we need to know. And we need to know when we need to know. But God sometimes says, I can show you better than I can tell you. So it's, it's incredibly an honor to coach this team here. It's an honor to work with the best coaches in the country. It's truly an honor to represent the city of Columbia and the state of South Carolina. Yes, it's an honor. We've had so many people that helped us get to this stage. We got, we got our fellas back here. We call them the highlighters who is the only team that beat us this year. And everybody, we got video people. We got, we got, we got performance coaches. We got athletic trainers. Molly Craig Hudson. We've had everybody.  We, we work with a, with a president that is so supportive of all athletics. He makes, he makes every team at South Carolina feel like they're national champions. So I want to thank you, President Amaritas. And I got to thank our boss man, Ray Tanner for, for, for always saying yes. Really he does. He always says yes.   So I haven't had to do that very often. So thank you boss man for allowing us to be here. Maria Hickman. Maria Hickman is our sports supervisor who has done an incredible job working with us. We're not, we're not that easy to deal with. Okay. Cause we know our standard and we know our worth. But Maria has a way of allowing us to navigate in this space of being, and being one of, one of the, one of the best teams on this campus. One, one of, cause there, there are other teams that are coming. You know, other teams are coming. But I appreciate you Maria for, for continually giving us an opportunity to spread our wings and to do some things that some other programs aren't able to do. To our players to, I want to give a special shout out to Camilla Cardozo who will skip WNBA draft orientations to be with you. If, if this is the last impression of what it is to be a national champion here at the university of South Carolina, you all, you all have made it a special time for her to take on to the next level, which is the WNBA where she'll continue to do us proud. But I thank you for giving her an awesome experience. She is a two-time national champion. So Camilla, and then, and then lastly to our players, and to everyone, I know I missed somebody. Diana Kovar, I know I missed you. Brad, I know I missed you. If I've missed you really, I charge it to my head and not my heart. But at the beginning of this season, I don't know why I said this. They actually asked me to say something on camera. Give me one word that's going to describe our season this year. And like me, I said, expect the unexpected. I don't know why I said it, but I said it and I, because I felt like we had enough on paper to compete at a really high level, whether that ends up in a national championship level or not. I didn't know. But again, these players, these players actually, and I have to go to our theme of this year, these players loved up on each other unconditionally, created a bond that created a heightened level of competitiveness to say, you can play us for a quarter, you can play us for two quarters, you can play us for three quarters. But by the time that fourth quarter comes around, we aren't going to lose. The band, it's not Lassie. The band, thank you. Thank you for always creating, you know, sweet music for us to win championships. And then lastly, this is Lassie. Lastly, it is our fans. Our fans, the ride, the seven block ride from, I don't know what street we started, but we're here right now. The love that you pour into us as we drove down Main Street, it is uncommon. And I really, really deeply appreciate your love, your unconditional love, although some of you guys are, you try to be coaches out there. You just can't coach on game day. That's the easy part. But I love you deeply. I hope we can end our season. Thank you. I hope we can end our season with us all in the same place at the same time on this beautiful day. So thank you so much for loving up on us. We really truly appreciate it. Thank you.