 So first of all I'm so thankful for being here in London for the first time and have the opportunity to present this talk that what I'm going to talk about is the things that I've learned about going from development to production with projects developed with Ross Python and using it for that so that's me well not the cat. I'm a Mozilla representative from Mexico. I've been with the Mozilla community for the last eight years and I'm a member of some of the communities that Mozilla have around the world and also I've been a speaker for a long time. I've been also part of the Mozilla Penelope program which is a program that gives people training and mentoring on how they can start around open projects. I recently joined the GitLab heroes program. So this is the agenda that I will follow but first of all my way to Ross. So I was part of the Firefox launch thing in Mexico a project that was from 2013 to 2015. You hear about Mozilla telling that the project will end in 2015. So after that I was looking for for a project to contribute but I was looking for a technical project. So that same year I heard about Ross which is the Mozilla programming language language that is being in development for since 2009 and I started learning about that so by reading the book, running the examples that are available in the official documentation, solving some exercises like the ones available here and migrating some projects from Python to Ross. Well at first that was the idea but then I realized that it wasn't possible and I will tell you why later. And working on some personal projects like this one. How many of you use HTML file for creating presentations? Raise your hand. How many of you know about Reveal.js? Great. So I started working on an application to have all my slides available from one place. So I created a gallery app and this is the UI for the project. You can take a look at the code at the GitLab repository. So I started this project with Python and migrating it from Python to Ross was so simple. I rewrite the whole code in Ross. But I also was working on another project that I applied with to the Mozilla program two years ago and for this project I was using the Kyro FB Python library. I needed this specific library because I was converting from SVG files to PDF. So that's how I found out that it wasn't possible to rewrite this specific part with Ross because there is not an alternative available in Ross for this library. There is also not create a library in Ross that helps us use Kyro by running the Python library. And also I was working on an example for a conference. I was going to talk about Firebase and Ross but there is also not any library available in Ross that we can use for connecting to Firebase and retrieving data from a database. Well, there are three but none of them are working. So the solution I found is to use Python. I had a background with Python, being a Python developer for years and also taught Python in a local university. So that was the solution and I found two crates, C Python and Pyro Tree that I can use for executing or running Python code directly from Ross and that also can help us to write Python models using Ross code. I've been using both of them but for what I'm going to talk about I was using C Python. So if you go to create.io you could find some libraries that you can use for running Python code from Ross but the two that I talked about before are the ones that are more mature on really use Python and Ross for building applications. So if you already have Python configured the only thing that you have to do is to install Ross but if you don't, if you're using any Linux distribution you probably have a version of Python over installed. Well, at least for the distributions that have it as a dependency for some applications but if we talk about Manjaro or Linux we don't have Python installed at the first. So this is the command that we have to run in the terminal for Linux distribution and Mac. What it's going to do is to install Rust which is the official installer for Rust and download the stable version of Rust. But for the project that I'm going to talk about we will use the nightly version of of Rust. We also need Git, GCC, Ross needs a C compiler and Cargo which is the package manager for Ross project. Talking about Python, we can use PPM to manage the dependencies of our project. This is the website of Rust, the official installer for Rust. When you go to that website it will detect the operating system that you run so it will show you how to install Rust on that specific operating system for Windows you have to download the X file and install other things I don't remember. I'm not using Windows for so many years but that's not the point. So we have to create a new project. For that we use Cargo which is the package manager for for Ross projects. Cargo will generate one file that is the Cargo Tomo file and a directory the SRC directory. The Cargo Tomo file is manifest for the application that we have information about the project. The dependencies that we need for the project. At the first time in the SRC directory we will have a main .rs file that will contain an example of a Ross application. After that we have to move to the directory that Cargo created to set the default toolchain for the project. But for this kind of projects where we will be using C Python or Pio Tree for the Python part we need to use the nightly version of Rust. On a Python directory where we're going to put the Python models that we need for the project, edit the Cargo Tomo file, add a PIP file or a requirements .txt file for the dependencies of the Python model and write the Rust code and add the Python scripts. This is how Cargo Tomo file will look like. We have the name of the application, the version of the project. It will take the user of your system and put it as the order of the project. That's been my nickname for the last 15 to 17 years. Don't ask me why I chose them. We have two versions of Rust 2015 that are versions before the 361 version of Rust and the 2018 that are the versions from 2016 to the actual one that is the 39. The dependencies that we need for the project, C Python for the Python part, which is a library that helps us with reading information from files like JSON and Rocket, which is a web framework for Rust. For the PIP file, this is an example for a project that uses Firebase and we need Firebase and all of the other dependencies are dependencies of Firebase, so we need to put those dependencies in the file and the Python version that we will be using. It has support for Python 305 and latest version. So this is an example of a Firebase database. This is a database where I put information of an application that I was working on, the application. It contains information about the speakers and it will rate that database to generate certificates of participation. I was using Python for this project, but as I told you before, I needed to use cargo in Rust, but there's no alternative, so I'm using the Python library. For the Python part of the project, we have to connect to the Firebase database and retrieve the data and save it to a variable that later we will convert the value to JSON so that Rust can read correctly the data and pass it to the HTML5. So I found more problems. I started learning this at the beginning of the year and unfortunately, there is not enough documentation about it. So the problems I found, I didn't know how to call a Python script from the Rust file, didn't know how to pass a value from Python to Rust in the GitHub repositories for these projects. Well, at least for the library that I'm using, there is no information on how you can do those tasks. So I started reading and thanks to Stack Overflow, I found a solution. I am also looking through .gov. I'm not using Google, so this is part of the solution. This is the code that helps us running the Python script from Rust, execute the function that connects to Firebase, retrieve the data and this function will give back that value to Rust as a JSON. So after that, the Rust code will convert this set of values to a hash map so that we can pass that information to the HTML file. So after I solve all of these problems, we have to compile the project, then run it and if we go to the browser, we will see something similar to this and the deep lab repository where you can find this example. What it's doing, create the Firebase database and show it in a HTML file. But let's talk about the deployment part of the project. So when we're configuring deep lab, we have to choose a Docker image for running the test and also do the deployment part. But there is an official image for Rust that also has an option to choose the version of Rust that we will use that could be a NITLY or beta or stable. And the problem is that the Python version that is installed in this Docker image that is based on a Deviant image itself is that we need PIPM and we need other tools to be installed. So we customize that Docker image and generate another one that have PIPM installed. And after that, now that we have the Docker image that we will use, continue with configuring the project by creating a repository. And upload the code using the terminal or I get cracking. And if this is going to be an open source project, even if it's a personal project, I recommend that those files should be in the repository. I read the file that will contain information about the project in general, how you can configure the development environment and any other information that people that go to the repository needs to know the license of the project, information about how people can contribute, and a code of conduct. And talking about the configuration, we have a Gitignore file. We can generate that file using Gitignore.io. In the search bar, we write the languages or technologies that we are using for the project, like Python, Rust. I don't know how many technologies it has support to. And another file that we need, the GitLab CI Jamo file, the tree that I registered here, I will explain it later. What are those files? The proc file is a way to, especially if you're using Heroku, it's a way to tell Heroku where is the binary file of the project. We need to remember that we're developing this project with Rust, so it will generate a binary file that needs to be executed. So that's the way that we tell Heroku what to execute. And see this project when we are using Rocket. So we have to specify that it will get randomly the part that the application will use. A Rust config file that will contain the version of Rust that we're using for the project. And then the Rocket Tomo file that will contain general information about how it's going to, well, the post that it needs to be open so that we can access the project for the URL. The GitLab CI Jamo file, it will look something like this. We have the build part and the production one. This is a general example, this is not a complete example, but it should look like this. And something important, document your projects. As I told you at the beginning of the talk, I'm from Mexico, so I'm living in a Spanish speaking country. And I started learning English 15 years ago. That means that I'm in a privileged position, but when we're writing documentation, sometimes we forgot that not so many people have the opportunity to learn English. And I'm talking about English because most of the information and documentation of technologies are available in this language. So, if we live in a non-English speaking country, don't forget to write documentation in our native language. So, and I'm doing this as a personal project at this moment, but I want the community to get involved. I'm writing articles to explain all of these things. There is not enough information about how you can configure GitLab for the CI CD part for ROS projects or how you can use ROS with other technologies and languages like Python or any other, like Node, for example. So, I'm writing here. You probably have heard about this site. Any of you have heard about the practical depth? Great. So, this is my profile. Here you will find some articles that I've already written. And the idea is to have more information available. But now I'm focusing on writing articles in Spanish. But if any of you is interested in having this information in English, I could take the time to do it.