t in factors so now we have all the quantities we need say we have a model. So we just sum the gradients so that we have one gradient for each user and product. And that's it. So you might say, well, that seems a lot of steps, but that's the price you have to pay for doing this computation in a distributed way. So you might think, well, now that we have them, we have the latent factors. We can perform easily predictions. But what if you get new observations? What if you get new data? What if you get new data from a project we never seen before or a product we've seen before? So how do we deal with that? So you might remember that we trained the model with nothing in the first initial mini-patch, right? Sorry. So we trained the model with nothing in the initial mini-patch, but now we're just carrying over the model to the next mini-window with the next mini-patch. And we just train it with the ratings that we have. So let's look at the case where now we seem to get a mixture of data from ratings we've seen before. So imagine you rate a new movie. You rate a movie last week, but you rate a new movie. But some users decide it goes into the system. It's the first time it's trying to rate something. Or it's rating a movie that didn't exist before. How do we deal with it? So as you hear, we just assume that the cells in red are ratings that you haven't seen before, right? And the others are cells that for users are products that you've seen before. So what we do now is instead of assigning random feature vectors for all of the products that we get, we basically do a full outer join between the RDDs that we produce and the rating factors from the data RDDs and the rating factors that we have. So that allows us to keep the RDDs that we already have with the feature vectors that we already have. But for the ones that we've never seen before, now we can do exactly the same steps as before and create new feature vectors and random biases as well. So in this way, you can deal any kind of situation that arises, right? So how does this behave in the real world? So we decided to test this with some real data. And to do that, we use the movie lines data set, which is a quite widely used data set in the recommendation engine research field. And it actually has two variants, so a small variant, which is quite big for prototyping. So it has ratings that users actually get to move these in a small file. So 100,000 ratings is quite good to do some quick prototyping of algorithms. And it has a full variant with 26 million ratings, which is quite good if you want to do some more in-depth analysis of the performance of an algorithm. And the data actually has several fields of interest, but we're just going to use a few ones from this data set, which is the user ID, the movie ID, and the rating. So that's basically what we're going to use. No, no, I was just going to go into how we set up the whole thing to train the streaming case. So yeah, that's a good question, but I'm just going to explain your question in a second. So how are we going to train this in answer of the question? So first, we train a batch model so we can have a baseline so we can compare it to the streaming version. And we just use the Spark MLBout of the Box batch ALS. So we split the data into 80%, 20%, and we basically train the data in one of the splits. And then we just keep part of that data set to the side so we know that we're going to use exactly the same two splits on one method and the other so we have a fair comparison. And we calculate some kind of error measure to have some kind of metric of how well the model is performing. So in this case, we use the root mean squared error. So it's easy to calculate in Spark given if you have the predictions and the original data. And OK, so we measure the root mean squared error and then we're going to compare the root mean squared error of the streaming version against this one. So how do we set up the actual streaming testing case? So we train this on OpenShift. And the idea was to use some kind of message broker like and we actually use Kafka to simulate the data stream. And we use StreamZ to do that, which is a project that allows you to deploy Kafka on OpenShift. And we use Oshinko, which is a tool from redanalytics.io, which allows you to easily deploy Spark clusters on OpenShift. And basically what we just did is we read the answer to your question. So we read the entirety of the data. And then we just basically replayed it through Kafka as to simulate the stream. And we use Windows of five seconds with 1,000 observations each. But this is just for convenience. It's just because it's convenient for practical purposes. You can use whatever you want. I mean, realistically, if you use one observation per minute or something, you're probably going to wait several months or years to wait for this to finish. So we just use that for practical reasons. And an important note is that the best parameters for the batch model are not going to be necessarily the best parameters for the streaming model. Obviously, they're completely different or very different algorithms. But also for convenience and for practical purposes, we use the same parameters in both models. But more in the next slides, I'm going to go into how to estimate hyperparameters for a streaming ALS version. So this is the result that we had. So the horizontal dashed line is the root mean square error for the batch version. And the blue screen line is the root mean square error for the streaming version. And you can see, well, it's quite good in the sense that it is what we were expecting. So in the beginning, you don't have much data for the streaming version. So it's kind of all over the place. But as time goes by, it does seem to be converging to a value which is in the same region as the batch version. So in the end, both the batch and the streaming process does the same amount of data. So it's a reasonable result. But you might think, well, this is all very good. And streaming ALS is like a silver bullet. It magically solves every problem we might have. But that's not the case, obviously. So some things which are very important to consider when using streaming ALS. So a problem with, and this is not particular of streaming ALS, is for all ALS and many machine learning models, is the cold start problem. So basically, the cold start problem refers to a initial point in your model training where you don't have enough data to make any kind of insightful inference or prediction. So you can imagine those slides showed of the monoleism in the beginning. If you remember, the latent factors are completely filled with random data. So the approximation is going to look completely random. So if you just have a few observations, that's not going to change that. So it's going to look pretty much random. So always be careful when providing, because you might feel tempted to, since you have a streaming version, I'm going to start serving away predictions immediately. So that might not be the best idea. And something you might do to mitigate that is to say, if you have walls of data, if you're a big company and you have walls of data, first train the streaming model offline with a big chunk of data and then start serving in a streaming way, right? So, but bootstrap the model with a big chunk of data. Don't start from zero and immediately start serving predictions with like, say, five grades or something like that. That might be, so the predictions might be rubbish. You wouldn't be able to get back. So another thing to consider is hyperparameter estimation. Excuse me. So hyperparameter estimation, excuse me, in the batch ALS, it's quite straightforward because you can do a grid search for parameters for several sets of parameters and then you decide, well, parameter set D is the best for my data. And then at some point in the future, if you want to retrain the whole thing, you can do it. Like I say, after two months of having this model running, you say, well, it's not behaving very well. If we try to retrain it with a rank of double size, something like that, then you can do that perfectly. You take all of the data, you retrain the model, that's it, that's fine. Because you have all of the data. But with the streaming case, that's not the case because when you get the data, you discard the data. I mean, in theory, obviously. But what I mean is if you're in a position in the streaming ALS that you need to refer back to an entirety of the data and retrain the model, then it's not really a streaming version. You're doing a batch, kind of batch hybrid streaming version. So what you do is you have a set of parameters, you get the data, and then if you want to try a new set of parameters, you can only retrain the model with that new data that you have because you discarded all the previous data. So you can't really do what you do in batch ALS. So a possible solution around that is to perform like a parallel grid search. What you do is you have a bunch of models in the beginning, you train them with a set of parameters each. And then as time goes by, you see which of these model or which of these set of parameters gave me the model which is least performant. And then you prune that model from your search. You say, well, I'm just going to keep these three models. And you keep doing that. This has an obvious drawback, which is it might be computational expensive to train lots of models simultaneously. And another thing is there's no theoretical result that actually guarantees you that a model that you discarded in the very beginning might not be actually the best model in the future when you had more data. You might be the best set of parameters. Forget specific small chunk of data that you had. So it's quite a tricky problem to train parameters with the streaming version. Finally, there's a consideration of performance. So in these kind of models, you're going to do, as you see, lots of joins. You're going to have lots of data shuffling around the partitions. So you have to be really careful of optimizing these kind of algorithms. Apache Spark does something very clever with a batch version in which they do something called the blocked ALS. Basically what they do is that they pre-calculate the amount of outgoing and in-going connections between the chunks of RDDs for the future of the latent factors so they can minimize the amount of data shuffling that happens. It's a quite clever algorithm. But a naive implementation of streaming ALS will give you nothing like that. So you have, on top of this algorithm, you have to think of some clever strategies to minimize data shuffling. And also something that for the more seasoned Apache Spark developer might raise some, make some alarm bells ring, is the fact that you might use some ad hoc random access fetching of RDDs to calculate some quantities. So say, if you're an algorithm, you find yourself calculating the predicted rating for a specific user and product many times. Keep in mind that to do that, you're going to have to access a specific row between commas or column of an RDD. And that's not really this kind of an anti-pattern in Spark. So it might be ending if your code ends up looking like this, having to do lots of lookups and stuff like that. So possibly it is just rethink your strategy of doing the predictions. So this is basically the explanation of a generic Spark ALS streaming algorithm. So if you want to check out more stuff about streaming algorithms or Apache Spark or OpenShift, I invite you to take a look at my blog. This is a specific post on streaming ALS, if you want to see it. And if you want to play around with distributed algorithms on Apache Spark, on OpenShift, or on the cloud, I strongly recommend that you go to the redanalytics.io website. You have several use cases for intelligent applications, machine learning at scale, which are very good, very well documented. You can actually learn how these things work just by reading the source code and documentation. And they actually have some ready use cases you can actually deploy like they have a microservice oriented recommendation engine built with a Apache OS version of Spark, which is very, very, very interesting. So I strongly recommend it. So that is it for me. And I thank you very much for your time. Can you start filling down? Thank you. So welcome to the MLAI track at DevCon US. Our next speaker is Anton, who's going to be talking about the data hub for CI. And I'll let him take over. Thanks. So I'll talk a bit about the OpenShift roots of data hub where it is coming from and how it evolved a bit from just regular logging for OpenShift into what we now have as a data hub. And I also talk about how we use data hub specifically to get data from various CI systems and what we do with this data. So it all started with logging on OpenShift. Basically, this is logging architecture on OpenShift. What we have here for those who don't know OpenShift is Red Hat distribution of Kubernetes. And OpenShift includes logging capabilities, meaning that it can collect logs for all the containers that are running inside it. It can contain logs from hosts that OpenShift and this logging capability is shipped within OpenShift itself. It consists of this logging namespace. Namespace is basically named collection of pods and services within OpenShift. The logging contains all the namespace, which is logging namespace and it contains of three major components. The fluendi is the collector. Elastic search is used as storage for logs and the kibana is used as a visualization reporting layer. There are some other minor services involved in the picture. Like we have the service. Service is Kubernetes concept which allows you to reach the appropriate pod. We have curator. Curator is a component which allows you to curate indices to discard old indices and optimize older indices. We have Prometheus and Cerebro. Prometheus is a component which is responsible for monitoring of getting metrics from the infrastructure. Specifically here we can monitor elastic search. And Cerebro is another component, optional component which allows you to get specific metrics, specific elastic search related metrics. And what OpenShift logging collects, sorry, OK. So what OpenShift logging collects, it collects logs from various spots and containers running in the cluster. It collects audit logs. It collects system logs. If we look deeper inside the server part of logging infrastructure, we can see that we have kibana which consists of two containers. We have elastic search which consists of two containers. As you can see, each container is fronted by the authentication proxy. So if we look at a user request which is coming through, then user goes into the browser. Queries goes to the kibana which is exposed route into the OpenShift. It reaches the authentication proxy and authentication proxy redirects user to OpenShift API so such that user can authenticate with his OpenShift credentials. And if user is authenticated successfully, user is redirected to the kibana container. Then kibana uses the user ID and header from the OpenShift authentication to query elastic search. That way we achieve multi-tenancy because the user that came in is known in this request. So we can give out the results of the query based on the user ID and headers. So kibana sends the request to elastic search. In elastic search there is a special plugin that was developed partially by OpenShift guys and partially by Search Guard. This plugin allows for multi-tenancy. We use it heavily in data hub. This plugin allows you to protect various indices from unauthorized access. Basically, user will be able to access only the indices that he has explicit permission to access. On the other part, for example, on the ingest part, the ingest goes such that we have service exposed. We can have it exposed via external IP or node port. The request comes in and it goes directly into elastic search. And basically, it gets indexed. We don't have Fluendi or any other ingester must have the appropriate certificates to get the document ingested into elastic search. At the moment, Fluendi can ingest into any index, but this can also be tuned. And for monitoring, we use Prometheus, which queries authentication proxy and gets the token from OpenShift. And that way Prometheus can have authorized access to the statistics of specific elastic search node. So this is the way that secure authentication works in OpenShift. And this is what we use in data hub to ensure that we have secure multi-tenant access within the data hub as well. So yeah, this picture was pretty much stock deployment of OpenShift with logging capabilities. Then what we added was two major components. One component is Kafka. Kafka is a message bus which allows for strongly ordered messages. It is very resilient and it is very high throughput. And we also added Ceph, which provides S3 interface. So three major components got added to the stock logging included in the OpenShift to get to what we call data hub. Elastic search, Kafka and Ceph are the key components in the picture. The other components that we have are various data ingestion components. Then we have various normalizers and we have other applications which allow for various data manipulation. Everything here is running on top of OpenShift, except for the S3 part at the moment. S3 is running on bare metal Ceph. But other than that, all the other components are running on top of OpenShift with us. Yeah. So yeah, data ingestion. One of the key reasons why we have data hub is to be able to get logs and to be able to get data from other sources from outside of OpenShift cluster. Basically, we took what was logging, stock logging on OpenShift, and we exposed it to the outer world. The way we did it was we introduced, as I said earlier, a message bus, which is Kafka, and we also introduced normalizers, which are special components. We have three different normalizers right now. We have Fluendee, we have RCSlog, and we have LogStash. So these three normalizers pretty much cover everything that is needed to get your data into the cluster. So any host that is on the Red Hat Network can be set up to send logs into data hub. The collector can be used, as I said, any of these three collectors. Fluendee, LogStash, alternatively, you can use Elastic Beats, or you can use RCSlog, or you can simply point your Syslog to log your Syslog to a remote Syslog server. And that way, our Syslog on our site is this normalizer. It will act as a remote Syslog server, and your data will get into data hub. So why we need this message bus? This message bus allows us to have a very robust layer, such that if we have any spikes, the Kafka will even out all the spikes, and we will not have any problems with its ingestion of data into Elastic Search. So one of the reasons is to even out the data flow. Communication with other buses. So we have multiple other buses within Red Hat. One of the buses that is often used is a unified message bus. And we have many various build systems within Red Hat, as well as we also talk to some Fedora build systems. And Fedora systems use mostly FedMessage as a bus of preference.  We basically subscribe to some topics on FedMessage and get a lot of data channeled into our internal data hub message bus. On the Red Hat build system side, we subscribe to unified message bus and channel most of the messages into our Kafka bus. So the idea here is that the way the built pipeline works upstream and downstream, upstream meaning in Fedora and downstream meaning within Red Hat something gets built within Fedora. And you get appropriate message on the FedMessage that something was built. Then Red Hat build system kicks in and gets the pieces from upstream and builds something downstream, respective component downstream. And one of our tasks is to reconcile what is happening upstream with what is happening downstream. And we do this by tracking the message within FedMessage and a respective message within UMB unified message bus. So yeah, a lot of systems within Red Hat ingest data to unified message bus. There is Jenkins plugins that does ingestion to unified message bus. And there are a lot of factory two services that do that. Also, we have external message bus, sorry, external data hub in a different cloud. And we also have the ability to replicate the data. So what we did was we deployed the data hub on the external cloud. And this is also full OpenShift deployment there. And we have Kafka message bus deployed. So what we did was we exposed Kafka as an OpenShift route to the internet via secure protocol, and internally we deployed Miromaker. Miromaker is a Kafka component which allows for data replication between geographically distributed Kafka buses. And what Miromaker does, it simply acts as a consumer and as a producer. So Kafka has a concept of consumer and producer. Consumer subscribes to appropriate topic and gets the data from some topic. Producers simply produces data into the other topic. And yeah, so here what we have is very simple structure. It was not the simple to implement, but the picture here is very simple. Miromaker simply mirrors topics from data hub that is located in a different data center into the internal data hub. There are no open ports in the internal data hub. Internal data hub is completely within Red Hat firewall. External data hub only has one port open for the secure connection to the external Kafka bus. So yeah, the other component that we have is ShipShift, which it is the internal product that we use to gather logs from various Jenkins servers. What it does is it waits for notification either on UMB or on 0MQ or on FedMessage. And based on the notifications, ShipShift goes and grabs logs, built artifacts from appropriate Jenkins job. That way we not only get the messages from UMB and from FedMessage, but also we get the full logs from Jenkins that includes Jenkins console logs and that also includes any logs that are produced within the job. The logs then are stored sent to a message bus and also stored in S3, which is our S3 backed by CIF. So yeah, data processing. On the processing side, everything we have is Kafka-centric and we want to have everything within the Kafka. So we run multiple applications. We have several rule-based normalizers that get data from one topic and send data to the other topic. We have several Kafka streaming apps that do the same thing. We don't yet have Spark, but the idea is that we will have Spark that will do the same kind of processing. So all the processing, all the data normalization is happening on top of Kafka. That ensures consistency and that ensures the delivery of all the messages. As for the presentation layer, the presentation is set up very, the presentation is very simple. MessageBus contains certain topics which are mirrored into Elasticsearch. So we have a topic in MessageBus and this topic corresponds exactly to an index pattern within Elasticsearch. Another topic, another index pattern. This indices get presented via Kibana to end user and we have a separate repository with reports which we upload to Kibana and the user can basically view various reports based on various saved reports in Kibana, command data model. So one of the key things that we have is a command data model. This is a rigorous definition of all the fields within Kafka and Elasticsearch. What it allows us to do, it allows us to make sure that we don't have any inconsistencies and that we have very good correlation between various different entities and similar entities. So if we have, for example, field called timestamp, it will be timestamp of this log entry throughout everything, throughout any kind of document. If we have a field called, for example, job name, it will be the name of the build job for any kind of document. The other thing here is we use hierarchical namespaces which means that if you have a product, for example, OpenStack, then we will get a completely separate namespace within JSON namespace for OpenStack, such that any product, anything that is produced within OpenStack can simply go into this JSON namespace and that way anything outside of OpenStack will not be able to conflict with this specific OpenStack product. So hierarchical namespaces allow us to have no conflicts within Red Hat products. Yeah, and also this common data model allows us to generate templates for elastic search easily. Yeah, specifically for CI, we build several namespaces such as CIJob. CIJob namespace allows us to have definition of specific Jenkins job or specific other job for specific other job and we can use it within elastic search to correlate with any, throughout any documents. Testcase is another namespace that allows us to correlate any test case. So basically any test cases, any data for test cases will be nested under test case. Any data about CIJob will be nested under CIJob. And same for Fedora CI. This is specifically for Fedora infrastructure messages. Any Fedora infrastructure message will be nested under Fedora CI so that nothing else can conflict with that and we can have nice, very good correlations in the end. And yeah, basic artifact workflow is very simple. This picture does not include, this picture does not include ingestion of messages via message bus. This picture only includes ingestion of Jenkins artifacts. So yeah, so four major stages, collection, normalization, storage and visualization. Collection is done via ShipShift. Then we do normalization. Normalization is mostly done via LogStash. Right now we have also other Kafka applications that can do normalizations. Storage, at the moment it's elastic search and visualization is done by Kibana. This is the layout of data hub from the point of view of OpenShift. So we have OpenShift consists of various namespaces and we view namespaces as an application from kind of broad point of view. So we have namespace, for example, that is responsible for all the ingestion. We have namespace that is responsible for storing the message bus. We have namespace for normalization. We have namespace for elastic search, et cetera. Basically, this namespacing in OpenShift allows us to have very modular approach to data hub. If we want to add or remove a namespace, it's very easy to do and it doesn't take a lot of effort to remove or recreate some namespace. And we also can control what namespaces are allowed to talk to each other. So we can disallow communications from non-data hub namespaces which we do and we only allow communications with data hub namespaces. Yeah, so it's just the snapshot of various tools and components that we have in data hub. I've already talked about most of them. We have elastic search, Ceph, Spark, Kafka, which are the key components that we have. We have a lot of other tools here as well. I think that's it. Any questions? Thank you. I'm curious how you deal with errors during normalization. Say someone changes the format of a message bus message so that your normalization no longer can convert it into your standardized format. Do you error out at that point or what do you do? So at the moment, we don't have a great way to deal with that. We do error out. So it really depends on the tools that is dealing with that. Some tools deal with this thing. Better some tools are not that great in dealing with this kind of thing. If there is, depending on the change, there might not be an error. But if there is an error, then we will error out. We don't have specific, at the moment we don't have a specific validation that the message must be in this format. We want to get to this point. We don't have it at the moment. Thank you. Yeah. You had a question? I noticed you had to have it over at many places. Is it CentOS also a client-genre? So CentOS also uses FedMessage, right? So yes, in that sense, and Fedora uses CentOS CI. So I mean, I'm not 100% sure what are the relationships between Fedora and CentOS, but yeah, I mean, we use, yeah. Chain code base. And Fedora, one of the external instances of data hub isn't CentOS CI. So yeah. Another question, very nice. I am appreciated looking under the covers of the design, but do you have anything to show like the dashboard, how you would use the information? I would, but I'm afraid I don't have VPN connection from here, so. Just one final question. This looks very close to a product that my company has decided to use called Splunk. Have you heard of that? Do you know of a relationship between them? Right, yeah. So Splunk is proprietary software. We use Elasticsearch, not Splunk, so. Yeah. Thank you. Any more questions? So we use something similar to Elasticsearch, Greylog, if you're aware of that, like the log aggregation platform. Sorry, which one? Greylog. Okay, Greylog. Yeah. So I was curious if you guys have any monitoring alerts or notifications that are built on top of the Kibana data. So Malik answers this question. So right now that was my summer project, which was monitoring each of the data hub components and send out alerts if there is like unusual log activity or stuff like that. Yeah. We are using Prometheus for monitoring and Grafana for visualizations. Any other questions? Thank you, Anton. Ooh, that's interesting. Yeah. What's your favorite color? Every life on YouTube. Holy, what did we do that for? Yeah, we have some trick questions, like what is Uli's coffee name? I don't know Uli's coffee name. Oh. First start one. Let's start one. I think we're ready. All right, we're good to go. Hello everyone, good afternoon. You guys have made it this far. First day of DevConf, that's pretty good. So what we're gonna do today, we're gonna talk about the impact of AI. And we have with us Jared, Uli and Daniel and they will be our panelists. I am Gerard Griffin, the moderator. I'm here to keep these guys honest and make sure that they tell you the truth and nothing but the truth. So first off, we're gonna do some introductions. Jared, maybe you wanna kick us off? Sure, I'm Jared Floyd. There's your microphone on? I think so, yeah. Maybe I'll move it a little higher. There we go. Yeah, I'm Jared Floyd. I'm in the office of the CTO working on a technology strategy. Yeah, Uli Drapa worked also for the CTO, Chris Wright, and no one knows what I'm doing. So I'm mostly looking at all kinds of compute things. Among them is machine learning. Daniel Rieck, also office of the CTO and I manage the AI Center for Excellence working on Reddit's AI strategy. So we're gonna start off with a pretty generic question to get the ball rolling. What do we think about the impact of AI as it deals with software development, IT operations, DevOps, those types of things? So I'm curious, Daniel, what are your thoughts on that? So I think that overall AI is this big transformation and many of the shiny topics that we see in media like self-driving cars and all that are hard problems to solve and there are a lot of low-hanging fruits for applying machine learning to improve IT itself. Software development operations, embedding AI capabilities, machine learning capabilities in our software products and the platforms. And the picture I used earlier, if you're driving a self-driving car, you probably don't want a SUS admin in the trunk, but that car is basically a data center on the wheels. So in order to get to that, you want to automate things to a degree beyond what we have done so far with IT and I think that applies generally to what we do with software. Jared, in your line of work, what do you think the impact of AI will be? Well, AI is interesting because it covers a lot of traditional analytics as well as machine learning techniques and I think I'll talk a little bit more about this later on, but I think that there's a very interesting set of patterns of newer applications that are built around data flows and bringing data into the system, doing some sort of processing in it, which may include AI processes and then taking action on that and that may be taking action locally or that may be taking action at a different point. So Daniel just talked about autonomous driving as an example. Autonomous driving has the full suite of AI ML techniques at play, but most of those aren't happening on the car, they're happening in a training process that's happening in a very large data center infrastructure. There's flow that's occurring where data is coming in from vehicles for asynchronous training purposes, it's being analyzed and then that's creating updates that are then delivered, again, asynchronously to the vehicle to improve its behavior. So managing how that data flow happens, managing the security of that data flow, the reliability of that overall application process, the general assurance that it's doing the right thing is going to be interesting because that same pattern occurs across use cases such as IoT, Internet of Things, another kind of large vape, but complex area use cases as well. So overall, I think we're going to see a shift to these data-centric applications of which AI is a core component for doing analysis. So when you mentioned about security and things like that, do you see a place in AI to maybe mitigate the risk for businesses or at least expose potential issues? I think from a security perspective, in that case I was talking more about making sure that you have templates for what your application lifecycle is so that you know that you've done appropriate integration testing, you know you've done appropriate regression testing before you put something in what can be a safety-critical situation. AI techniques also can apply for security use cases, really just had a talk two sessions ago about using AI techniques for anomaly detection or intrusion detection, all the things that we've traditionally built rules-based systems around, but that AI techniques allow us to create much more flexible, much more reactive environments. Cool. All right, now given that Linux is the biggest open-source operating system, what's interesting is there's a lot of Linux developers out there now. Uli, can you kind of speak to what you think AI means to a Linux and a systems developer and how that might change their paradigm or change their approach to development? So I don't necessarily think it's limited to Linux developers, but there are big opportunities when it comes to developing any kind of complex system nowadays where we reach the point that an individual is not actually able to understand every single aspect of this. It's not able to understand the signals which the system can actually bring out and recognize it as something positive or negative or something like this. And therefore, not so, even if they sometimes recognize them, they might be biased in a certain direction that they actually don't want to recognize a signal as being something good, something bad or something in between and so on. And getting mathematical logic in place to do this kind of work, to do the analysis of the work will open up completely new venues. So just to give you an example, also a couple, I gave earlier today a talk on micro-architecture of CPUs and so on. So this is something which if I would fill the room with a hundred people and throw a stone, I probably could not hit the single one who actually knows anything about these kind of things like micro-architecture. This is a very esoteric topic, but at the same time, if anyone who wants to do performance analysis using today's performance counters, which are available in the CPU, you cannot do anything without actually understanding what they mean. So, but with some, if we're writing some logic, some mathematical logic around the analysis, we can actually learn what makes up, what measurements actually describe a good workload as opposed to a bad workload and have the AI actually learn these kind of things without the user actually able to describe what makes it good or bad. So we can learn from the systems directly and circumvent the lack of understanding which the user might not have or the program might not have. And this extends to the set beyond just the Linux world. So it's for everyone. It's a big advantage going forward. You just have to build these kind of systems. Okay. Daniel, will you have any thoughts on that as well? Well, I think this is this general pattern that we can use AI, brought the sensors to the password to derive knowledge directly from data. We have the ability to generate a whole lot of data now. The complexity of our systems are beyond the capability of humans to understand. And AI can help us make sense of things or it can autonomously derive meaningful information from this very complex set of vectors and amount of data. So the problem with the data is it's the volume but also the complexity of data that just beyond what anyone can still grasp as a human. You just have a limit on how many vectors can you consider when trying to understand what the root cause for a problem in a machine can help us. And the other aspect is that something which has been worked on also is some of the tasks are mundane and therefore programmers are not likely to take them out voluntarily. So monitoring a CI system of some sort or recognizing very simple faults like, well, yeah, you didn't commit this message, this check in here and so on, it's missing something. So this is done and Sherrod can talk about this as well. So he's done using work using bots, oftentimes in some form where simple tasks might not even have to be handled by humans anymore. And therefore we get much more reliable systems because these kind of mistakes, if they pop up can be very quickly rectified. So with the automates, it sounds like a little bit of the removing the manual tasks that a person might have to do. Have you guys experienced any of those examples of things maybe we're doing in Red Hat in that space or other tools where you've seen a good job of it eliminating that manual mundane task? I've certainly interacted just on, I don't know the project or product but I've interacted on GitHub projects where I've reported bugs and immediately had a bot come back with, you might find these other ones relevant. And that's a very simple conceptual piece of code but actually having it produce useful results was enormously helpful. And we have examples like that that we're in the flake analysis in CI for example where you, it tells you if there's like somewhere deep in the many aspects of like how a system can fail, they look random to a human observer because you don't see the depth of, it was like on a full moon and someone tortured a black Schrödinger's cat on the graveyard and you don't know that but it's somewhere in the log and in the metrics of the cluster where you run your test. And after it happened five times, there's a pattern there because somewhere deep in the vectors of the data, it's a clustering of issues and so the system can identify that that's actually not a flake, there is a problem somewhere hidden deep in the code that as a human it just doesn't happen often enough or it's too hard to understand what happens and we have said today it's improving our quality as we speak. Although a phase of moon is not a common but it builds contingent. You'd be surprised. You would be surprised. So to the other side, this is actually also an interesting thing where we need some work by a lot of research going on. Most of the works in machine learning nowadays are built on the law of large numbers where you need statistics to actually catch a relevant result. So what is going on to some extent nowadays and will be hopefully the focus of more work is that we actually can work with very small data sets and derive patterns out of that in a reliable way. So the thing which Daniel mentioned that we might get to the same error situation five times in the sixth time we can actually do something about this ahead of time. That's very, very useful and we're trying to do some work in that area so I have my personal helper on that kind of thing to do the math for me and looking forward to actually getting results of that error. Jared, I wanna go back to something Daniel mentioned earlier and that was part of his presentation earlier about data being the differentiator. Having all of this information, all of this data, the way you use it, how you make it available both internally and externally to your team. So how do you see with data being the differentiator what does that mean in the AI space and how does that impact AI in general? That's a very interesting question I hopefully can give an answer that won't get me into trouble. So one thing that's very important about not just AI but AI is really driving value further up the stack. We've already driven value from lower level software to higher level application infrastructures. What AI techniques do is that they drive value from your AI infrastructure to the data to the models that you're building with that data. And so this can be very challenging because you can ship software that's open source software which is fully capable of solving a particular problem and may even have the input and output hooks to solve a particular problem. But if you don't ship that with a working model then the software itself is useless. And if you don't ship it with the data to train that model, then you'll be limited potentially in what an open source user can do to enhance that. Similarly shipping a model in and of itself can be challenging because it depends on what data has been used to train that model that if that's confidential proprietary data your model can potentially leak information that you don't want to be leaking. So I think that as ML grows in importance in the open source community that there are going to be some very interesting conversations about what license do we make these models available under? What about the data sets? Do we have open repositories for the data sets and the models that are training these newly critical systems? And a lot of the discussions that we had many years ago around licensing and software we're going to have to have those same conversations again as it comes to the data and the models in ML based products that certainly there are data licenses that exist there are content licenses that exist they may or may not be appropriate for these particular types of data or may not be nuanced enough to describe the variants of licensing that we may want to allow. That's interesting. Daniel, what are your thoughts about the difference between open source data and these closed off black box systems? Obviously you have someone like an Amazon or Google where they've collected all of their own data therefore they have the power with their own algorithms but as you mentioned earlier that's a little bit different with open source can you kind of dive into that a little bit more? Well it's two sides of this I think that for a lot of things where we're going to use AI we need open source even more than we needed with the pure software so the difference is that traditionally it's all about code, right? We're code centric and the source code is complete and describes the functionality of the software. With ML suddenly you need the data to describe the full functionality as a training data to describe the full functionality and depending on what you're doing that might change like when you're running the software. One problem is that if you have a machine that derives information, draws conclusion directly from data and takes action based on that there's no human in between anymore I think that even more drives a need for transparency that only open source can provide and so that's one aspect of this. Trusting a black box service is getting harder and harder and more knowledge or intelligence because that's like in there and more intelligence is in that service and then on the other hand yeah I think what Jared said and I'll be curious what Uli's perspective is on that open source versus AI and like how do we keep that consistent? We've reached kind of a detente with firmware blobs which are opaque binary data that's necessary to have a system operate but I don't think that we can stay static with that same level of acceptance as ML models become more critical to the pieces of software that we're using here. Yeah so the data aspect is certainly so it makes up part of the solution and so on that beyond so David Penner mentioned also the implementation the implementation is important as well so that it is actually freely available and can be inspected because the software which are built for modeling let's say deep neural network or even other techniques and so on well why would you trust them actually to do something? So that could be hidden somewhere in there if the user is Greek then spit out a thousand dollars otherwise zero so I could hide this thing there so it has to be inspectable and this also means that for the data itself even if the implementation is right and someone is delivering the trained model with it it has to be replicatable so in machine learning really is nothing but the scientific process actually put in reality for everyone to use and one of the aspects in science is that you have to design an experiment and make it reproducible because otherwise no one is trusting this and the same will now be true for every single program out there and therefore we have like Jared mentioned at some point we have to think about how we're delivering models along with this but also the description so things like notebooks which have been available for a long time so Mathematica was programs like this at them forever and notebooks are going to be the way how you actually describe how you arrived at the state that your model is right now and then people can say oh yeah I see this, I can replicate this and therefore I can trust the service and I think that the firmware is a compromise that people are willing to make because hardware is proprietary like hardware is physical right so it's somehow an anchor to something proprietary historically we're just changing right and like- I wouldn't say firmware is trusted so just look at the Intel's I didn't say it's trusted people it's only good- people dealt with it like- we're actively working to do away with the stuff so we actually lacked the ability to be introspective to audit the hardware that we run on to the same extent so I think Daniel was saying that the firmware is abstracted into the same level that I don't de-cap my CPU and use a scanning electron microscope to validate that it's doing what it says it does and there could be all sorts of malicious things that's happening but I think at the point where whole operating systems are embedded in the CPU and not the best operating systems like I think it was Minix's obsolete or something was the- the version which they use there's many versions behind so at that point I think like I think you know it's probably it's a bit of a different but it's time for open source hardware and then we're getting there right and anybody said that's another thing so we're working on that as well and I'll probably like in the same like the more the more autonomy machines get the more important this is gonna be because we- the more they take over the more we have to trust them so and that becomes a very fundamental question for business, for society. Well and I think there's a very related security issue that you raise that goes back to the training data for models and the necessity to have that be replicatable in an open source product because one of the big challenges with machine learning systems is that the ability to be introspective into the reasons why they make the decisions they do is a much younger area of research than the learning models themselves and so to be able to one ask on what basis were these decisions made and also to make sure that there isn't a trojan horse in the model that as we suggested if you're the right person then you can take all the money out of the ATM because it has an M.O. model deciding what it should give you which is not a very good use case for a model. All right so talked a lot about the hardware part of it and the latter part and the hardware versus software what about software in terms of the data versus the source code when we start to talk about the entanglement of needing to have enough data for the algorithms but then also having to have the right algorithms that can analyze the data Daniel what are your thoughts on that? That's a very broad question. Yeah so no but the main thing is there data science, machine learning, AI some people call it I don't know why is not something which you should think you know you can apply if you just know that oh yeah I can call this library and be done. So you have to think about a model as it is produced by machine learning algorithm like a function so if you put in good data you get good results out perhaps but you put in garbage you get the garbage out so how do you to be able to successfully use any of the machine learning techniques you have to be able to distinguish between the model being garbage or not and that's not that easy so this is actually something which requires you to understand what the math is you know what the weaknesses of the various techniques are etc so this is not as easy there will never be black boxes where you can say well here's my data do something with it and in the end well it will work always that's never going to be the case in my opinion and therefore you have to be careful with what you actually do and who is actually doing the work so again so anyone can produce a model but whether the model is useful that depends on lots of quality factors do you see that as a challenge for organizations maybe Jared I don't know if you've come across this but companies want to move towards AI and ML and they implement these but it does seem to require quite a bit of work to tune fine tune get the feedback from whatever service is being used and make sure that that model is accurate are companies prepared for the workload that it takes to actually tune these models on an ongoing basis well I think what Uli was getting at was actually just a microcosm of software development as a whole which is that many businesses are very for it understanding what software they want to develop and therefore the software that they produce doesn't do what they want but we don't have the ability to open up a text buffer and write a short description of what the software should do and have a system automatically generated and as Uli points out we never will because half of the hard part of software or at least a large percentage of it is deciding and determining what it's supposed to look like in the first place that I'm not suggesting that the right way to go about this is the big design of front multi-thousand page specifications but understanding what problems you're trying to solve are critical to selecting the tools that you're going to use to solve them validating that you're solving the correct problems or validating that you're solving the problems you've set out to solve and then deploying that software so AI and ML techniques are just another set of tools in the box for solving business problems, personal problems, educational problems, societal problems that we want to influence with systems and so in the business framework you have to know what your problem is before you know what tools to solve it, you're going to use to solve it and you have to know what those tools are capable of before you can select them and so there's a whole spectrum of tools for data analysis from traditional statistical techniques which is a lot of what these data science workbench products allow you to work with to the newer ML techniques where it largely comes down to again knowing what problem you're trying to solve can you clearly define the inputs and the outputs that you want out of your process whether it's statistical or ML if you can't then you need to go back and figure that out because none of the tools are going to solve the problem for you and then it's simply a matter of selecting is this something where when looking at the problem can I describe what the rules look like? Is it that there's a very large space of possible input scenarios but I have a very easy way of describing what rules apply for what actions I want to take then neural network isn't the right tool necessarily that there are other rules based systems that you can use on the other hand it's really easy for me to create a huge set of example data that I can feed into an algorithm where I can define very clearly 10 or 100 or a thousand parameters from that input data set where I can clearly define what outputs I want but it's really hard for me to describe in relation to those inputs what rules need to be applied that's where more machine learning return neural network approach makes sense so these are all tools that you have and yes lots of people are using them wrong and lots of people are using them because they're buzzwords we can have our AI IoT blockchain talk after this a file for an IPO for a startup that's going to do blockchain neural networks can you do that with blockchain? I think you can do it all with blockchain that's my understanding I mean the IPO or isn't it? ICO we'll do an ICO for our AI IoT blockchain startup afterwards and we've used all the right tools in all the wrong ways so there's one other thing and this is confusing many people who don't necessarily have the insight in there so oftentimes people are using machine learning especially deep neural network learning mechanisms in what is called unsupervised learning situations so this is the entire business model of likes of Google, of Facebook, et cetera so they're trying to learn in an unsupervised way the massive amounts of data are something about you they don't actually know about what it is they are just looking at similarities of some sort and so on so in a completely unsupervised way so there's no human doing an intervention so why does it work? Why do I say, well, this doesn't work in general? Why does it work for them? The reason is simply that the impact of them getting the model wrong is that you're seeing an ad which you don't like BigWoop, who cares?  It's a little bit more important that you don't want to have this so there's the last spectrum of course in the middle but I would argue that pretty much everyone who has to be taken serious doesn't have the freedom to just ignore the quality of the model so most of the time you really want to have something which is really solid in its results so in my previous life I worked for a financial company and so on and there they could not do these kind of things automatically because the result might have been that you're losing a couple of hundred million dollars so that's not doable. It's not just human life with one might be at stake and therefore I would really argue that these nice looking prospects of machine learning which come from the use of unsupervised learning might be good for things like marketing et cetera for answering these kind of things but pretty much no other area of life where you actually depend on the result. All right so we're just about out of time. Do we have time for any questions? Okay so we'll take a couple of questions. Anyone have any questions? Sure over there? You have another mic? Just a second there come with the mic. Hi hello I just wanted to know your views about AI and gaming. Well the AI interacts with human constantly and there is a lot of criticism which isn't one. AI and gaming I wanted to know your views about AI and gaming. Gaming? Who's a gamer here? So I did write, so I did write my own games for a long, long lying time and what we call the AI back then doesn't really compare to what it is today. So it's certainly, I think you're mostly referring to the open AI and so on trying to solve games using AI and so on. This is a completely different thing. So they're using this mostly because it can be done 100% inside the computer without tiring anyone out. This is just an example for the solution where the input is not a binary one zero and so on. It's visual input so in theory so there's a similar experiment where you can actually if you own a GTA license you can actually write your own driving simulator using GTA on a machine versus then just does a screen grab which would be the equivalent of a camera which you have in the windshield. So that's the only thing why these companies are using games for that because it provides something where they can cheaply create situations with very extensively complicated inputs and trying to write something which we thought we couldn't do before in this sense. So that it's games is beside the point. This is just a coincidence. Great. I think we're just about out of time here. We wanna thank the panelists for joining us and they did say you get a special door prize if you guess who's been at Red Hat the longest. Hey everyone. So the next topic would be ARMED and Loaded using ARR and OpenShift. Thank you and over to Ricardo. Thank you. All right, thank you. So. All right so good afternoon everyone. I'm glad to be here at DevConf. I had the opportunity to go to the latest two DevConf in Bruno and I think it's a very good conference to share some experience with developers for other areas. And I'm very glad to be here. So speaking about experience, what I'm going to show is a bit of my experience, a few of my experience with data visualization and data manipulation and a bit of my personal initiative to bring our own OpenShift. So let's get started. Well, I think most of you know what our language is but for those who didn't understand what our language does, well, ARR is a language that believe it or not it's 25 years language. So it's pretty old and its main utility for the language is data manipulation, calculation and graphics display. So it's very useful. Now they're talking about big data and machine learning. We're talking about using ARR for statistics, data exploration, data visualization and machine learning. Well, I personally love the language but why would someone use ARR for data manipulation? Well, ARR is a very useful language not only for software developers but those who are not software developers can use ARR too. It's a language with a very easy syntax and not only that, there are many libraries that covers many, many applications and you can download the libraries through CRAN. CRAN stands for the comprehensible or archive network and particularly I'm trying to find the comprehensible in the CRAN but it's just a personal opinion. However, be careful when you try to load a huge amount of data because ARR uses in-memory calculation so be careful if you have a huge data set to manipulate it's not recommended for this kind of situation. All right, just to show a little bit about how easy is ARR for data manipulation I'll start our session here. So this is the ARR prompt. It's like a bash, you can run commands in here so I'll start reading a CSV file and as you can see I have type completion not only for commands but for paths so I'll use the US elections CSV and as I want to handle this data I'll put in a variable, all right. So now I can check the first six lines of this data. The first six lines of this data, I can check the latest six too. I can, we've summary command, I can look at a little bit about my data like for example, I have total votes 2008. It's a number column so I have some measurements of the data distribution like minimal, maximal, the quartiles, mean, median and in case of a text column like for example, counting name I will have the frequency of each word inside my data set. As I said, ARR is for statistics so I can also calculate the standard deviation or for example, total votes 2008 so it's 52 far to zero 0.69 and what else? Well, I can also plot the data so let me try plot the distribution of total votes for 2008 and I have a very simple graph to show the spread of my data. All right, so what about companies? How many companies are using ARR today? Well, there's Facebook for behavioral analysis, they use a lot of it in their related to status updates and profile pictures, Google uses for advertising, Twitter for data visualization. Microsoft and IBM are part of the ARR Consortium. It's a special group who maintains the ARR Foundation, Uber for statistical analysis, Airbnb, ANZ and so on. The search for the list of those companies is below and what else do we have for ARR? Well, as I said, ARR has an extensible repository of libraries and one of the things makes ARR very good is to create quick data visualizations around your data and in particular, there's a special library called Shiny which is a very useful library to create dashboards in a web application style so you can use, just let me show the Shiny web page. So you can create dashboards using your data, you can create some visualizations, create some interactions with it and using some of the standard components from Shiny and you can also change the style using CSS, themes and so on. So ARR is a dashboard is a very good, in my opinion, is a very good option to make quick visualizations and to publish in a web application style. All right, so now we know what ARR is. Let's talk a little bit about cloud and containers. So we have currently this form of using cloud computing and containers and most of the requirements of the motivations around that is mostly because of what NIST defined as a cloud computing. So they elected five requirements for cloud which is self-service on the main resources, broad network access, research pooling, rapid electricity and measured service. So everything we didn't have in standard data center style architectures we have in cloud mostly because there is the biggest motivations around the technology itself. All right, and why I chose OpenShift to run ARR? Well, I've been using OpenShift since the alpha version. Give me, well, four and a half years ago and one of the things that makes, in my opinion, OpenShift a very good platform is that it's a developer-friendly environment.  You can also have some pipelines so you can split your workflow in stages where you can test and deploy your application in production. And now with OpenShift P3 you have all the capabilities to create microservices style for your applications. All right, so mixing cloud computing and ARR makes the image which is published and available through the RedNet.io project. It's a project aimed to bring some machine learning and big data capabilities to OpenShift and we have the attached Spark as the central component of it. It's one of the biggest projects coming in the big data area. It's a very useful tool to make large-scale computing around your data. And ARR is around this language supported by Spark who have also Java, Scala, and Python. So, and ARR in OpenShift offer also the S2I style workflow to build your application. So for those who doesn't know what S2I is, S2I is the standard workflow in OpenShift to create your own application image just by just providing the base image and the search code in a Git repository and the ARR image has also its own dependency management. Well, although we have the CRAN repository which has all the libraries started for ARR, we have this problem that we don't have a way to provide a metadata where you can just tell the dependencies of your application. So this is one of the challenges I did in the ARR image so I needed to create my own dependency management mechanism using a kind of a metadata file in a very simple text file. All right, so let me just show a quick demo with the ARR image. So this is my repository where I started my shiny application and this thing I would like to bring some more attention is the dot ARR libraries file. What does that file means? Well, this is the file I told in the last slide about that makes the dependency management mechanism working in the ARR image. So as you can see, it's just a very simple file with each line mentioning the name of the libraries required to build your application, your ARR application. And this is honestly the only difference or the only capability I created for to make SUI works for OpenShift. So we have also the main entry point, the app dot ARR which calls the server and UI. It's the front and back end for shiny application. I'm using some custom CSS and JavaScript file and in this example, I start my data files inside my repository, but I could also use an external storage to load the data. Well, yeah, I think this is basically what I have in my repository. So going back to OpenShift, this is my project where I have the US elections data sets which contains the last three elections data, the number of voters of each county for the last three elections. All right, so this is the visualization one second. Okay. So I created a JSON file with all the counting limits and then I merged the US elections data inside the JSON file. So what you're seeing here is the map of the US divided by the counties and the caller says the number of voters of each county. And there are many parts with that same caller. The problem in this data sets that most data and most the data is below 400, number 400, 4,000 voters. So most of the counties are with the same caller because of that, but you have also like for example, let me check another one like here. Nope, there are some counties here with more than 10,000 maybe here. Yeah, this are just very few number of voters. But as you can see, if you point to the county, you can see the number of the county and the name of the county and the number of voters in that county specifically. Also, I created a very simple page to explore the data. So there's a table here with the state name, county name, the party which received the votes and the number of votes of each election. So for 2008, 2012 and 2016, I used the shiny components to create a very simple filter. So I can look at the Massachusetts state and East sex county. And I have only the data related to the state and county. You can also use the other filter here. So like for example, East sex, right? And it shows all the occurrences around the data. Okay, lastly, I have this other visualization which is bar graph with the votes by state in the 2008 elections, but I can also choose the 2016. So the data changes as I'm changing the parameters. And I have a checkbox to color the votes by party. So these are what the colors do. And there's the legend of the graph here. All right, so this is a very simple dashboard I created with the US elections data. This is just a demonstration of the capabilities for our image inside open shift. And I know that there are lots of improvements I need to put that, like for example, I'm going to prepare more the base STY image to support machine learning features. Maybe I need to do some more research like GPU scheduling, add full the patch spark support. I know there's support for sparkly arm, but I like to also add the spark arm improve build times because the CRAN repository only stores the search code for each library and the process is basically download the search code and compile the whole source inside your image, your container, and that makes the build times like for example, in the US election application, it takes about 16 minutes. So I'll try to come up with a better way to improve the build times. Also, I have only the image streams for our, so I'm going to create some templates to fast creating applications using R and try to find a better way to handle dependency management. All right, so that's all I have so far. So before I finish the talk, I'd like to thank everyone who attended this talk. It's my first time talking about R, so I was a bit nervous. So if anyone have any questions, feel free to ask. All right, thanks Ricardo, that was really nice. When you were showing the R interface that you had, one of the commands you ran was like a summary and it showed statistics about the various information, your data source. Yeah, yeah, yeah, the R prompt, yeah.  Could you like, if you wanted some of that information? I don't think I follow your question. Well, could I run the summary command and then say I want the top entry for county name or would I have to run a different query to do that? Like would I ever use the summary in my application? Well, let me see if I understood because you're saying a little far from the microphone, I'm not hearing you. So the, whoa, so the summary, would you ever use this command inside an application to get the summary data? So if I understand your question, the summary, if it's kind of part of my application, is that? Would you use it in an application? Oh, okay, right. Well, to be honest, summary and some other commands I ran here is just commands to do some data exploration, but you can also, you have other commands to build applications, but the idea behind some of these base commands is to have a very quick inside of all of your data. So for example, the summary is just a base command to know what your data is, how is your data? Like for example, if SR is mostly used in statistical calculations, summary usually brings all the statistical data around your data. You, I'm doing with all the data set, but I can also choose some specific column, like for example, which is better. Also, and this I need to use my special library called deep layer. It's kind of an advanced data manipulation tool, but I can also use, like for example, do you know in Shell, you'll have the pipe command where you just get the output of one command and passes the input of the other command. We have the same in deep layer, but it's not the pipe, it's this strange symbol, which they call the pipe, but you can also with election data, you can filter by total votes in 2008 below 4,000. And we have the data. Let's just do another thing. Sorry. So with the output of that command, I would like to select only the total votes in 2018. And with the output of that command, you can also use a block box plot. And there it is. So what I did is just, if I use the same command using the raw data, it will be a very difficult box plot visualization to see because of the outliers, but then what I did is just, I filtered the data to get the data below 4,000 and then I selected only the column I would like to visualize and then I call the box plot just in a single pipeline. So all these commands are mostly used to get some data exploration and Shiny could be useful to create all the visualizations to publishing a webpage style. So does that answer your question? Yeah, it does. Thank you. Cool. Hi, can you hear me? A little bit. About now. Okay. So when you start by saying this tool is easy, this is easy, it's not for developers. You don't have to be a developer to learn it. You were talking to me. So how, a few questions. If you use a comma separated CSV file, do you have to format that in any particular way to get the way, does it have to be format in a specific way for R or is it just any CSV file? Number one. Can it be any CSV file? Actually, CSV file is just one of the services I could use, but I was handling another dataset for atmospheric data, for example. They have a special format called net-cdf. It's a binary data. So it's very hard to use in standard text editors, but I know that there's a library inside R called rnet-cdf, which you can read the net-cdf data and then I created another. I created a function to read the net-cdf data and export to CSV. But it can be whatever CSV as well as have separators and you don't need to have the first line as the call names, but you need to specify you don't need the first line as a call name. You can also have the roll names, but you need to specify if you need or not to read the first column as the roll name. So there are lots of options to read. And then any CSV data. Not only CSV data, but every other format that could contain data. I'm intrigued by this because I just had a project where I had CSV files all over the place and I had to use grebs, set, or to just kind of get what I needed and print out what I needed. And this, our language as you presented it, looked like it would have been great if I knew it two weeks ago. So for a newbie, how much effort would you say it takes to get to a point where you can create reports or something like what you just showed today? Thank you. Well, I'm going to finish that our session and I'll start again. Can you see that there, that last paragraph, you can see there are two very helpful commands. There's the demo command where there's another, there's a list of very simple use cases to use R and there's the help for the online help. So when you type help, it will open a very simple HTTP server and export, open your web browser with all the online documentation for R. There's also some very beginner R tutorials. So it's, for me, if I would begin learn R, I would start with one of these two commands. All right. So thank you, everyone. Thank you, Ricardo. Thank you, everyone, for attending today and we hope to see you tomorrow.


We'll stay in with Security Matters. The Social Economic Rights and Accountability Project CERAP says it has filed a lawsuit against President Mohammed the Buhari for imposing fines in media houses for allegedly glorifying terrorism. CERAP also wants the courts to declare arbitrary and illegal the five million are imposed on trust TV, multi-choice Nigeria Ltd, NTA StarTimes Ltd, and Telcom Satellite Ltd over their documentaries on terrorism in the country. The suit, which was co-authored by the Center for Journalism, Innovation, and Development, CJID, has the Minister of Information and Culture, Lai Mohammed, and the National Broadcasting Commission NBC joined as defendants. Recall that the NBC imposed the fines on the media house on the grounds that their documentaries glorify the activities of bandits and undermined national security and not that contravenced the provisions of the Niger Broadcasting Code, but the groups ensued for last Friday at the Fajrong High Court Lagos CERAP and CJID are seeking an order setting aside the arbitrary and illegal fines of five million in Nigeria and any other penal sanctions unilaterally imposed by the NBC on these media houses simply for carrying out their constitutional duties.


Before anybody that roots for the Yankees or anybody within the Yankees said okay Let's make the big run for Manny Machado.  He's got phenomenal talent And if they signed him he'd put up great numbers But do you want to enter that sort of a player? Into the ecosystem that you developed on this team because one thing you can say what you want about Stanton You can say what you want about judge You can define their careers whichever way you want the type of players. They are Every time they hit a ground ball they run hard to first base every single time Can't say that for Sanchez Can't say that for every player on the team But those two guys are the big stars and they run hard to first base every time so does Gardner. So does Hicks You're gonna bring in a guy when you have very very young players that he can influence That's gonna loaf it down the first base every now and then More frequent than every now and then do you want to expose? Glabor-Torres to that do you want to expose and do harder just to thought everybody not saying that you signed It was the end of the world, but this is a guy in the last year of his deal Can't find it within himself to run hard to first base every ground ball he hits I know it bothers me too unless we find out that he's got an injury and he doesn't want to hurt it by Running out of ground ball. He knows he's gonna be out for Kano did it Yep, and they offered him a seven-year deal that he could have very easily taken so if the fans don't like it doesn't necessarily mean The Brian Cashman won't mm-hmm It's interesting, but he's a singular talent, and if you don't have DD for half the year Yankee fans I would think if you put it to a vote if you ran it up the pole 80% would say you know what bring the guy in It's interesting though because if you get him and DD comes back then you are essentially saying Miguel Anduor is not the third baseman. Yeah, I'm not really sure they're that love with him anyway How could you not be in love with him as a hitter you can find someplace else to put him Well, where if you're gonna put him at first that eliminates void and bird Well, if he's that good of a hitter, which we agree he is then maybe you can get something for I thought Joel Had a good column he's 26 years old if you're gonna sign him don't go into a 10-year deal because the bottom of the deal is gonna be awful Off from a five-year deal of 40 million a year Then he becomes a free agent again at 31. Would he take it? I don't know There's probably some team that'll give him a 10-year deal Do the eighties want to fly in that orbit where they also have Stanton for nine more years and at some point Judges gonna be free agent. Well, maybe what you hope is is that Stanton can be dealt to the Dodgers if they lose Machado Like let's say this team full short of the world series again or loses in the world series again And if they're gonna lose the talent that they traded for would they then be aggressive and try to get stand Ah, can you make room now? No, because I from what I'm hearing the Dodgers will not re-sign them They've got Turner. They've got Seager Seager is coming back. So maybe they they say, okay, we'll take stand possible Now would you rather have stand them Machado or would you other I think Machado's a better player than Stan? But Stan plays hard all the time he doesn't I watched him a lot his whole career with the the Orioles and he had a guy Who was a stickler for that and also the star on that team or the leader of that team Adam Jones ran hard to first base every time And it's still young sometimes man. He didn't sometimes man Again, Manny is a singular talent. Sure is they don't come along very often


The undergraduate research project that our team is working on is to create a competition that the participants will design a drone system that can actively track one of the several ground robots in a miniature city automatically. I joined this undergraduate research project by registering for the vertically integrated project course. There are multiple professors including Dr. Lu along with other graduate students as mentors for our research project. They usually provide us with access to the online resources like existing work or papers and also talk to us personally to give us their personal experiences and help us solve the team management problems. Advising first time undergraduate students has many benefits. First they look at things differently also they come out very different ideas how to solve problems. For Hongjiao I think over the last year he has demonstrated exceptional leadership skills communication skills and really look at things from a very different angle. In fact I suggested a solution and a few weeks later he told me I was wrong and my solution didn't really work so that was a very inspiring experience learning from first time undergraduate researchers. I would definitely recommend students to do an undergraduate research project because it's so different from classic classroom settings and more of like internship experiences you get the chance to work on practical problems earlier than others in the academic setting. This undergraduate research project helps me find my interest in autonomous vehicles and motivates me to further study in this area in my future master degree.


would work as like a special needs teaching assistant as you know and I really missed that missed the kids and it wasn't really a job for me because it was very taxing on me. Quite stressful and the working days are very long well not long but they were very sort of intense and you have to be like as a teacher you have to be very like switched on and like planning things and sort of I found it really really hard but I do miss a lot of the kids that I used to work with so I understand why you decided to kind of go back and have a bit more of that local. That's what makes me smile walking through the door I see the human people and they and they said and our children that they're so unique and so pure of heart really just absolutely amazing everything they do and it just it just brings you back to ground.


In today's video, we've got another easy shiny hunting method for you to take advantage of in your copy of Pokemon Scarlet and Violet, but before we get into today's video, please subscribe to the channel. Remember, you can always unsubscribe later if you would like to. So today's easy shiny hunt is going to be for Flamigo, the new fighting type Pokemon that we've got in Scarlet and Violet, and this is probably the easiest method within these games for you to go out and get this brand new Pokemon in a shiny form. So this method, if you are familiar with the Tad bulb shiny hunting video we did, it is very similar to that. We are going to be wanting to fly or travel up to the Glacido Mountains. The highest point in Paldea is the location. So on the map, it is just northeast of the Glacido Gym. It is located right here. As you can see on top of the mountain is where we'll be with this sign. Once you kind of interact with the sign, you'll have this as a fly point to be able to come back to it. Now we're flying here because you can't set a picnic up where we're actually heading to. So you want to just get yourself down into this kind of flatter area where we are here, just down from the sign and you'll be able to set a picnic up. And as always, we will be making a sandwich with encounter power level three and sparkling power level three, but this time for fighting types. Just make sure before you set the sandwich up to save your game. So if you don't get the shiny from this method, then you will not waste any ingredients. So as always, I will put some recipes on the screen and they'll be linked down in the description below. So if you would like to check some different alternative recipes out from what we're using here and just to mix up the herb amistica, then check them out and you are more than welcome to go with whatever you want. I'm just going with this one because I'm running low on salty herb amistica. So it's the easiest one for us to get this sparkling and counter power for fighting. And there you can see we've got that sparkling power and encounter level three for fighting types. So that is exactly what we need to get that bonus title power as well. So once the sandwich is set up, you're going to want to head down to the left side of the mountain. You'll see this river just below you here. And that's what you're wanting to head towards. But to the left of it, there is a ridge where we are going to want to go. And that is where the hunt is primarily going to consist of us looking for this Pokemon. So just on the map, this is the location where you will be. So just a little bit kind of north of the highest peak point. And this is where you would be the kind of mouth of the river or the top of the waterfall area here. Once you are on this ledge here, you will start to notice the flamigo kind of spawning in. So you can use your camera function to get a closer look at the flamigo. You're probably not going to need the zoom function like you did for the tad bulbs. But here you will see the flamigo will start to just spawn in in this spot. So it's really easy just to sit here and wait for a number of them to kind of spawn in. And if they aren't spawning in quick, just move your character around a little bit and it should kind of initiate the rest of them spawning. So the color that we're looking out for these flamigo are kind of darker pink, I guess, because the shiny is a lighter, more pale pink. And that's what we're looking out for. And all you need to do is wait. Just let them spawn in and there'll be a maximum number. So once a certain number have spawned in in this area, then you're not going to get any more spawning in. So what you would do in this situation is you would just run, because you can't set a picnic up here to despawn them. Just want to move away from the cliff side here until all of them disappear and then move right back onto the ledge again. And you'll be able to just put your camera straight back on and take a look. And they should all keep popping in over here. It does get a bit tricky when it gets weather conditions like this. You're going to get snowstorms. So it can get a little bit awkward for spotting them. But you kind of just have to be kind of paying attention, which you do for most tons anyway. So it's not like I need to tell you that or remind you. But like I say, if they're not spawning in super quick, just move your character around, just try and get a bit closer to the edge. And they should spawn in a little bit quicker on the other side of the ridge. And you can see they're coming in at a really good pace now. And all we're doing is going to sit here and wait for the shiny to spawn. So we'll just need to move backwards and forwards. Like I say, once the maximum number look like they're not spawning in anymore, you want to just quit out of this and then just walk right to the other side of this ledge. And until all of them have kind of despawned like that and then come back to the same place you were in on the edge and they should all start spawning in again. And when the snowstorm is not active, you'll have an easier time spot on the shiny when it pops in. But like I say, you just need to kind of pay attention and you'll see they're coming in at a good rate now. So you'll be able to fly through these and get a good amount of them in the 30 minutes that you've got with your sandwich power. And there it is, we've got the shiny. So you can see it quite clearly. You just need to jump over this point and then grab it. So just be aware you can drop a save as well if you want. But there we go. It's quite obvious that it is the shiny. Definitely want this in a love ball. So what I'm going to do is just run. I'm going to drop a save and then I'm going to try and get it. Drop a save. I'm going to try and find my scissor with a false swipe. My shiny bird. Come here. Come hit that shiny bird. There we go. False swipe it again. And then let's try and get it. If I can get it in a love ball, that is incredible. Let's see. Can we get it? We get it in the love ball. Yes, that is perfect. Happy now. So friends, that is how you get your shiny Flamigo in Pokemon Scholar and Violet. It's super easy way for you to get it. And I hope you're able to get it a bit quicker than what I was. As I say, it took me a couple of sandwiches to get the Flamigo this time around, but really happy that I was able to get it. And remember, if you do come across it, you can drop a save if you want to get in one of those special Pokeballs like we did. And I do feel like this is the best area in the entire games for where you're going to be able to get this encounter. And an isolated encounter is that where it's super easy to get this brand new Pokemon to Scholar and Violet. If you found today's video useful, please drop a like on the video. Do subscribe to the channel if you're new for more Pokemon Scholar and Violet content. And I'll see you all in another video very soon. So until then, friends, take care of yourselves and bye-bye.


Hi and welcome back to the next module or you can say the last module of this course. My name is Krishan Rajarana. In the previous module, we studied the regular expressions, basic elements and syntax in detail and demonstrated how you might assemble and test a regular expression pattern. So by now you know that a regular expression is nothing more than a way to describe something represented in a string of text. Now in this module, we will see some real time use cases of regex and we will see those regex syntaxes which we have learned in action. So in this module, we will cover the following use cases of regex. First we will create regex to match US zip code and then we will create regex to match SSN number and then we will create regex for credit card number and then we will create regex for matching date and then we will create regex to match a website URL and then for finding home address, we will create again another regex and then at last we will create regex to matching email address. Now to perform all these demos, we will be using online regex testing tool and PDF multi-tool provided by ByteScout. Now regarding this PDF multi-tool, we have already learned about this tool in module 1, so you can refer the previous module video. Alright, so now let's get started.