 Hi, everybody. My name is Adil. I'm a software developer at Autodesk, as Jeff mentioned. Where is Jeff? I can attest to the fact that it's a great place to work. There's something that you can be sure of. There is lunch and everything. So yeah. So my talk today is about something that I built before I was hired by Autodesk. It's pretty much before we start talking to that, I'm going to mention something. This talk is to part the flask part and the electron part. The flask part, we're going to run it through it fast because I assume that everybody pretty much is really familiar with flask. So we're going to go through it quickly. This is what we built for this project. Don't worry if it's a little bit fuzzy, just because there was some kind of number that I want to not be very visible. But the idea was that we needed a key PI for our marketing effort. We needed a way to be sure that each one of the marketing action was given some form of result. The problem was we are getting a lot of information from a lot of sources and a lot of different formats. We have mail-in, we have direct marketing, we have conventional marketing, digital marketing. And this data was getting in in so many formats that we needed a way to be able to gather it together and to analyze it. So this is why we chose Python and we used this framework to be able to congregate this data and make it work together. And this project was aimed to a non-technical user. So we needed a user interface that was understandable by everybody. So for the Flask part, we used a simple Flask app with the large app structure as recommended by Flask. And we did some tweaking on it. And once we have the core functionality up and running, we needed a way to package it. And this is when Electron come to work. Electron is a Node.js framework built by GitHub when they were building the AtomIDA. They needed a way to use web technology to create desktop application. So they come out with this idea. And once they figure out that it was good, immediate, public, and available to everybody, some of the apps that are built with Electron are Skype, Slack, all these things, more and more apps that are more with interaction with the web. They're using Electron to build it. To start with Electron, it's really simple. What you need is two files, a package, the JSON file, we're going to declare the app details and the main process or a main.js file to declare the app and run the main window. So once we had the Electron scovled, we needed to compile the Flask app in a way. Is it better? Oh, I'm sorry. We needed to compile the Flask app in a way to make it portable. And Python has already a great package for that. It's called PyInstaller. It's really simple to run. You just have to install it and run the command in a way to precise that it's exactly this is my file I want to run and this is the extra data I want to add. The F flag here is going to allow the PyInstaller to compile everything into a single app. And the add data is going to add the rest of the information. And using the child process in Electron, you can call the Flask executable and run it. And we have a structure like you see in the left with the Flask app already compiled and the Electron data already. The Flask app is going to take some time to run. So we created a loading page. And this is when Electron is good because it allow you to have full control over the windows you show. If you want a splash windows form, it's going to show you exactly the right windows without any additional information. The Electron, at itself, it doesn't allow users to compile the app to an executable. You need another package called Electron Packager. That is going to check all the code with the assets and the app itself and compile it to an executable. To run the Electron Packager, you need some flags. For example, you need to have to specify the icons so that the app is running the right way. You need also to ignore all the files that you don't need so that you reduce the size of the app. And there is some form of compression using the Asser method to allow you to protect your source code. For example, if you have a lot of files that you want to protect and nobody, you don't want people to have access to them. You just run it with that and it compiles it. Once the app is compiled, the good news is it's protected, nobody can access your source code. The bad news is you can't add any data to it. So if you have some activation key or something, you will have a hard time to run it. And this is where Python and Electron have a good way to detect in which operating system you are and to push the extra data exactly in the right folder. And you can access it and deal with it. The Electron app usually comes without a menu, so you need to declare a menu so that you can add extra functionality to the Flask app. Interacting with the Flask app using the menu can be done either by Ajax calls or by command line. This is the talk. It's quick. There is a lot of extra documentation in Electron in the documentation. And it's going to allow you to have more information about the auto-update and the native functionality. Any question? Yes, what PyInstaller does exactly is it gets you a reduced copy of the Python runtime beside all the packages that your app is going to be needed to run. And it puts everything in a simple executable. This executable, as it is, it's good for an app. The only problem is not giving you any UI. This is why packaging it using Electron was good so that we can add Node.js functionality to the app and show UI for the app. We tried multiple times, but having doing it that way will give a lot of variables that we can't account for most of them, and that gives a problem with the time. Bundling the app using PyInstaller was the only way to ensure that it's going to run no matter in which environment you run it. Thank you.