 it in context of Linux and Ubuntu. So let's then get started. I'll just share my screen and start with the session. So first let's go to eventier.com. Can everyone see my screen? Yes, yes, Arif. Great. So first of all, let me log out. Sorry everyone, I realized I shouldn't logged out. We are logged in into the eventier platform itself for the session. So once you go to eventier.com, you see the screen where we can see some featured events. So as you all know, events, general terminology and event can happen over a span of days. And thus there are two sections here, featured events and upcoming events. And then there are call for speakers. So call for speaker events mean that the events which are upcoming and they have open call for events, which means that speakers can submit their sessions and the moderators and organizers of the event will accept or reject the sessions of the speaker. So these are the three sections on the front page. And then if we go to a particular events page, we call it a public page. So if you hear or read an issue that this is a public page of the event, then it means that it is the front facing the page which the entire public accesses. So this is the public page of the event and it has various sections. For example, the event description, ticket section where the present tickets are shown with the you can select quantity and there are multiple prices. Then there are featured speakers. The speaker is someone who has a session in an event like me and others in for session summit. And then we have sponsors, the partners and sponsors. As you can see, there are multiple levels of sponsors. And then the organizer information and address. And similarly, there are sections like schedule where you can go and see the various sessions you can sort by popularity and by time and by title, you can select a particular day and you can favorite a session. For example, I favorite some sessions here. So I can add a session to my schedule and the circle and the text you see in here means that these amount of people have added the session to their schedule. And thus I can click on my schedule and also filter that show me only the sessions I have added on my schedule. And if you go to a particular sessions detail page, you can see the expanded list and all the attendees who have added it to their schedule. And if a person's schedule is public, if they've enabled the public profile, you can click on the person's avatar and see all the sessions that they have favorite it. For example, I'm seeing here my use of sessions and thus this information you can be interactive that what kind of sessions a person is interested in. Similarly, there's a act to calendar section here. If I click on it, then you can add event, add sessions and add my schedule. So generally, this is something that you will see this exhibition section and other stuff. So this is the public page. And then there's an organizer section. So for example, if I go to manage events, I can see here the events that I have created or I'm an organizer of. So this is the manage event section. And if I go to the event dashboard, I can see the organizer section of my event. And this is generally somewhat confusing to users when they start if they hear about the bug is an organizer section. And sometimes, for example, if I go and paste this link on the issue to show that the error is in organizer section and ticket section or something else, right? So they try to access the URL and they get an error that you do not have access to this page. And they say that I cannot access this page. Well, yes, you cannot access this page because this is my event. So generally, if you try to solve an event, sorry, if you try to solve a bug, which involves an organizer section, then it means that you have to create your own event to access the organizer section. And then, but it still is something that you can do on event.com, you can create your own event. So if you go to this create event section, there's this event wizard, which you can use to create your own event and thus then can access the organizer section. And then the last section I'm going to talk about here in the introduction is the admin section. And this admin section is something that you cannot access on event here only event here admins can access this information. And thus if you want to debug and solve an issue on the admin section, if there's something written that something is not working in the admin section, then you have to deploy the server locally and thus make yourself the admin there. And then you have to solve the issue. So in just I wanted to clear these three sections out that public section, obviously a public event, you can access it. It's the easiest bug to reproduce and solve. Well, not solve, but it is the easiest to reproduce. And then there's organizer section. If you want to solve a bug there, you need to create your own event. You can do it on event.com or the development site, the development server. The next part of the last section is the event as add sorry admin section. And for solving issues there, you need to deploy the server locally and then link it to the front end to solve it. So I hope the sections are clear. I'm not going too much into deal as this is a workshop and we get hands on. So then I'll get started with the workshop. So I hope everyone is on Linux. So is everyone on Linux or does anyone have a Windows machine here? So the prerequisite is Linux. So I hope everyone has Linux. Does anyone have Windows? So guys, this is an interactive session. I'm currently sharing my screen so I can't see the chat. So if someone has to speak up, please use the mic. But if you don't know anything, I'll assume that the answer is Yes, Pradeep, there are some Windows users in our chat. Okay, so for the Windows users, I'll recommend that you use WSL too. So WSL is Windows substrate for Linux, subsystem for Linux. And it enables you to run Linux on Windows machine. It runs in a virtual environment, but it's much faster than a normal VM. And you can install WSL too. You can make this work on Windows, but we don't support it. And if some issue comes up, it will be very hard for us to solve it. So that's why I recommend you to use Linux. But anyway, if you have Windows, you can just see what I'm doing. And when you try it out on your own, you can just repeat the steps. So I'm in my terminal, I'm increasing the font size a little bit more. I hope you can see it. So as you can see, I don't have anything in my current directory. And then I will be going to the first step of contributing to any project is going to the repository. So I've opened this repository, open event server. So I'm increasing the font size again. So this is the open event server repository. And it has the read me. So first, if you want to install it, you have to read the read me file. And then there's some information about the master development branch deployments. So we'll be following the local installation guide. So once I open local installation guide, it lists some steps. So I'll be following that. It says I need Python 3.8 and a process and open SSL. So these are the requirements of the server. Most of the times the beginner gets stuck on the version of the dependencies. So for example, they have Python 3.6 installed and they get an error or they have a higher version of Python and they get an error as well. But we only support Python 3.8. Now we are using a poetry dependency. So manager. So it actually is very strict about Python versions. So it becomes even more important to for you to install the right Python version. So we'll see how to do that. But first, we need to clone the repository. So first, let's go ahead and clone the repository. And this is a very fresh instance of Ubuntu I have here. I've created a Docker environment so that any error that you get on first time installing the project, I get it as well. So let's say I clone into it. So one thing which is pre-installed in this project, in this Docker environment is Git. So if you have not installed Git yet, I'll just show you once this is cloned that how to install it. It's plenty easy. I'll be assuming that the Linux distro you're using is Ubuntu and obviously any derivative of it like elementary and elementary works. But the commands I'll be using for dependency management is of Ubuntu and the official documentation also only supports Ubuntu. It also supports Mac, but it's somehow outdated always. So anyway, let's say if you do not have Git installed, you first run sudo apt update. So what does it do is that it updates the information, the registries of the software's available and then you install Git by writing sudo apt install Git. So this is not just about Git. This is about any software. If you want to install it, you first of all try sudo apt install and the software's name. Otherwise, you just search on Google and you normally find that what needs to be done. But anyway, I have already installed Git. So it does not install it for me again. Then I go back to the documentation and then next thing is I want to seed it into the project. One thing, Harip, is it better if we fork it and then clone it? Yeah, yeah. So definitely the documentation would have mentioned that if you want to contribute, first fork the original repository to your Git up profile. I'm not going to do it here because I've already forked and it might be a few comments behind. So I'm just using the Force Asia the original, the origin of the open event server. But if you want to contribute, you definitely have to fork the project and then clone it. And this is also an important point. Thank you for that. Whatever we are doing, well, you can follow it step by step and still get to the working version of the server. But obviously, because it's a workshop and I want you to try it hands on and later answer your questions. I'm going to be skipping some of the steps, but you need to read documentation carefully and customize it to your needs. So then moving on to the next step. As you can see, there's a lot of details into the documentation about SSH keys and everything. I'm going to just go ahead and then talk about installing the system dependencies. So for Mac OS, this is the things which we have to install for Debian and Ubuntu. This is the one. So I'm just going to copy it and paste it. I'm currently in open event server. So this is also something which people do. They try to run some command and it doesn't work. And I realized that they are not in the project repository. So once the person, the documentation has said that you need to seed into the project. Some commands may work without being in the project, but assume that you have to be in the project to run those commands. These commands, this particular command takes the .txt file where we have listed the dependencies and it installs them. So you do not have to manually write all the dependency names there. So this has prompted me into terminal UI. Most probably, if you're running this into your PC or laptop, it won't be prompted because I'm running it to a Docker environment. It does not have necessary information about my time zone. So I'm just going to choose six Asia and then 44 Kolkata. This is the Kolkata time zone we follow in India. And then it has installed the required dependencies. So as you can see, the dependencies it has installed, it is saying that 3.8.2. So I was lucky that Python 20 already supports 3.8. But for some versions of Ubuntu, they may not support 3.8. So what you may do? If you have a problem, when we go to the interactive part of the workshop, I first want to just smash through the steps. And when you have any issues, I'll answer them and I'll solve them. So generally what happens is that sometimes the Python version is not what is required. So there are two options for it. So I just go to the documentation point to it that if in case you use Ubuntu 20.04 where Python 3.8 is not provided in the official repo, you can use PyN to install Python 3.8. And it's not compatible with Python 3.9 yet. So it's not even compatible with Python 3.7. So you have to be on Python 3.8. It's very important. So I'm just going to show you how to see which Python version is installed. If I write Python dash dash version, sorry, Python dash dash, let me move it here. Version, it says command not found Python. So a new version of Ubuntu, the Python is not installed by default. So I installed Python 3. So I can just write Python 3 instead. So don't fret if there's any command in the documentation that uses Python. And it says Python not found. So you just use Python 3 because the server only supports Python 3 anyway. So it says Python 3.8.5. Let's say it said Python 3.7 or Python 3.9, then it would mean that it's not compatible with your installed Python version. So we don't uninstall the current installed Python version because a lot of other projects might be dependent on it. So what PyN does is that it allows you to install multiple Python versions simultaneously. So you can use PyN. Or if you want to globally install it, you can use, you can search on Dr. Go that how to install Python 3.8 on Ubuntu, whatever your version of Ubuntu is. And then there will be some repositories that you can install and install a specific version of Python. And I'll also tell you that how, for example, let's say you have Python 3.8.6 installed. So if you write Python 3 anywhere, then it will automatically take Python 3.6. But let's say you have now installed Python 3.8 using app repositories or PyN or something else, then how do you force the commands to use Python 3.8? One trick is to use alias, but then it'll use Python 3.8 anywhere it references Python 3, which might have conflict. Other way is to write Python 3.8 directly. So if I had installed multiple versions of Python, I could have Python 3.6, Python 3.7. And by default, Python 3 would have, you know, defaulted to Python 3.6. Then if I wrote Python 3.8 everywhere, it would have automatically meant Python 3.8. Then let's take a look at other install dependencies, which is postgreSQL. Now, it says that the server is installed, but you need to start server using this command, right? So you just copy it, you won't find this particular documentation in the, you know, in the documentation because it changes from version to version, it changes from distro to distro. I installed it locally, previously it automatically installed, it started the server, this time it didn't. So let's paste this command. And it says that, you know, there's an error. You must run this program as cluster, owner, postgres, or root. So one thing that you can do is write sudo pgcluster. So you can run it as root and it'll work. And I'm going to do that. So now it has started the postgreSQL server. How can I verify it? So psql is the command line, like Python is the command line for Python server and the Python programming language, psql is the command line for postgreSQL. So if I write psql, I say, I see fatal role docker does not exist. So what happens is once you install postgreSQL, the default user for the database is, is a postgres, right? And thus you cannot access this psql command using directly without passing in the user. So what you do is you write sudo dash u postgres. So what it does is that it will switch your user to postgres, which is installed by default once you install postgreSQL. And then access the psql command. And once I do that, I can enter the postgreSQL, you know, server client cli. So basically, now it's working. So I just exit it and then resume the documentation. So next thing is how to, we have to install poetry. So we have poetry is like pip. So you must have heard of pip if you have heard of Python. But pip has some problems. For example, pip does not have a good dependency resolution and locking mechanism, which means that if I have installed a request version 3.2, I might have installed request version 3.2.6. But when I am deploying the server to the production, it may install some other version like 3.8.10. And that might contain breaking changes. But I want whatever I have tested to be the version that is deployed on production. And that's why poetry has locking of dependencies. And also if you write, if you change the order of dependencies and requirements to text in pip, it also may change the actual dependencies installed. So that's why we use poetry. So let's just copy this command, which is given in the documentation and paste it. Now what happens? It says curl not found, Python not found. Python not found because, as you can see above, we have to write Python 3 or Python 3.8. So because a lot of commands use Python for us. So I'm just going to use alias mechanism because I don't want various versions of Python. If I want to have that, I won't use alias. But now I don't want them. I want all Python commands to point to Python 3. So if I just do that, by default now, Python will alias to Python 3.8.5. So now the next thing is command not found curl. So we have to install curl now. So let's just say sudo apt install curl. As I said, if something is not found, you just do it like that. Now curl is installed. Let's rerun the command. And this will install poetry. And it's important what comes next after that. As you can see, welcome to poetry and everything. And it's saying that it will add the poetry command to this particular directory. And one more thing which is important is that whenever a project is installed without the sudo command. For example, if you write sudo apt install something, it will install in the global path. So you don't have to do anything. But if you install something without a sudo, generally it installs it in your home directory, the user's directory. And it is not by default available in path. So if I write poetry right now, nothing will work. So a lot of people just know what is written in the installation message. But if you read here, it is said that you need to add this directory where poetry is installed to your path. Now you can do it manually. But it has said that it is already edited in your initialization script of the shell. But if you want to use it here and now, you can use this command. So I'm going to do this. And after, if I write poetry, it will work. So then the next command in the documentation is, as you can see, source profile and everything. I already ran the source command. So I have to run poetry install. So then let's run poetry install. So now it says not compatible Python version. As I said previously, this is the most notorious issue that we have in compatible version of Python. Even when we installed Python 3.8, poetry requires Python 3.8.26. Now, this is something I recommend that you always use. That's why I recommend that you use pyenv so that you can have multiple versions of Python. But currently, because we are in this workshop, I'm just going to change the Python project, pyproject.2ml, where it is written that we have to use Python 3.8.26. I don't have them. So again, this is a nice example that if you don't have something, you just write, so do I have to install and that will be installed. So I'll go here and change this to Python 3.8.6 to Python 3.8.5. Now, this will only work if you have Python 3.8. If you have Python 3.6, Python 3.7, or Python 3.9, even if you change it in the poet, this pyproject.2ml file, it won't work because we use Python features which are present in Python 3.8. So it will give syntax error on older Python versions. And Python 3.9 has some breaking changes which our project does not support. So we are logged in Python 3.8. So let's just run poetry installed again. And then it will automatically create a virtual environment for us. So what is virtual environment? So if you use pip to install anything, it installs it globally, which might result in conflicting dependencies across projects. So a virtual environment is a special folder where the dependency is installed and it is project specific. So it differs from project to project and it installs the dependencies of a project in a specific folder. And then if you want to use those dependencies, you can't just use them by default. You will have to enable that virtual environment. But poetry makes it easy for us. We don't have to manually create the virtual environment. We do not have to manually enable it and disable it and something like that. It is very easy to manage virtual environments using poetry. So to confirm, can everyone listen to me? Is everyone following? Cool. So the dependencies are now installed. The next thing we want to do, let's go back to the documentation. Next thing we want to activate is projects virtual environment. So we write poetry shell. Poetry shell. So once you have installed the dependencies and whenever you want to work on the project, this is an important one. You don't have to run poetry install again and again. But whenever the dependencies of the project change, you need to do this. So for example, let's say you worked on project on November, now you come back to the project in January, you run GitPull and you update your local project, then you run the project and you say module not found error. So a reasonable assumption is that the project has new dependencies that you don't have installed. So you have to run poetry install again. But you don't have to run it again and again every time you want to contribute on project. But you want to run poetry shell again and again. Because as I told you, it enables a virtual environment. If that virtual environment is not installed, it's not activated, then those dependencies you installed previously will not be available to your project. So then let's go again. Then since after installing the dependencies in your virtual environment, you need to configure pre-commit hook. So what is a pre-commit hook? Basically pre-commit hook is something which runs whenever you commit the code. Whenever you didn't get commit, it runs. So we have configured some hooks like for example, black, which is a Python formatter and import sorting code and things like that. So you don't have to worry about it. You don't have to worry about formatting code and things like that. If you do not use this pre-commit, then your PR may contain unformatted code. And we might have to go through cycles to say that please format your code this and that. If you install pre-commit, then automatically whenever you commit it, it will format it by default. You don't have to do a lot of work. Then comes the juicy part, how to create database. So as told previously that you have to use the sudo dash u command, first of all, to create a database and do anything related to Postgres. But this is very clunky. Why do you want to do that? So we can make it easy by making ourselves super user. So you can use this entire command. But the thing is that you want to write your username. So as you can see, this in this environment, the user is Docker. It can be read. It can be Pratik. It can be something else. You then want to just use your username here. And once you do that, you have to enter your password. And then this user will be created in Postgres. Now if I run psql, it says database does not exist. So I can say create db and then I can make it same as my username. So what's the benefit of it? If you create a user in Postgres SQL with the same username as your Linux user, your Ubuntu user is and same database as well with the same username as your Linux user, then you can write psql and by default, the kind of the default arguments of this function of psql are the user and database is the same name as the Linux username. Then you can access this command line without sudo dashu, Postgres and something else. And now you're the super user. You can create any database and anything at all. So then you need to create the database for the project. I'm skipping the dasho commands because they are kind of redundant. After this entire workshop, I'll also be updating the documentation with whatever error you saw being added into the documentation to make it easier for you. So we'll run these two commands and now these two databases have been created. So to verify that, I go to psql, I say backslash l and you can see that we have Docker database, we have oavn database, we have test database and others which are installed by default. I exit it. Then we go back to the documentation and as you can see the documentation mentions that what kind of method this is. This method is called peer identification method. The connection is established via Unix domain socket and there's no need for password. So when I wrote psql, there was no need for me to enter a password for accessing that database. So this is a great way of authenticating for the local users. Then there are some alternative ways of creating the username and password and everything. Then the next thing is about generating configuration. We run this command. There's .env.example file. If I say ls, you can see there's let's do the stash a here. So we have .env.example. So this is an environment file. So what is an environment file? Basically environment file.env file lists some configuration variables. And you can configure them using environment variables as well. But using .env file makes it easy for you to see what are the configuration variables. So let me just first copy the command this .env file and then let's show you what's in the .env file. So as you can see the database URL points to Postgres square oavn that the database we just created. And then there's a commented database URL as well which lists another format of the URL. So if you did not follow the documentation or you have some Postgres SQL in some other port or you have another database name or you have another username or you have another password, you can use this form of URL to connect. And then there's other environment variables about Postgres user and things like that. But next part is very important. So next part says that add the secret key environment variable. Excuse me. So basically it says that you have to add this environment variable for cryptographic users. So whenever we generate passwords, hash passwords and encrypt some files, we use the secret key. When we log in users create tokens for them, we use this secret key. If you have the secret key, which is same for two instances of program, for example, let's say I have event.com. And if I share my event.com secret key with you, then you can locally authenticate any user on event.com. So it will be a huge privacy breach. So that's a breach. So that's why we want this secret key to be unique to every project. That's why we have not included a default one in the .env project. And if you run project without a secret key, it will show a warning as well. But unfortunately, many people do not read this section. But it's a very important step. So it is written that you have to run this command in order to generate a secret token. So let's run this command. And let's copy this and add it as a secret key. So it is random. If you generate it multiple times, it's a different value again and again, I just go to .env and add secret key here. Secret key equals this. Now, next thing. Now we have to create DB. So basically, we have to create the tables which are in the database. So I just copy the command. And now this is giving me an error. What's the error? It says that lip kyro was not found. So there's a dependency in a Python environment which is not satisfied by the installed packages. So we want to install a new package. So how do we do this? As you already know, sudo apt install lip kyro. And it says there's no package named lip kyro. Well, I said that whenever you need a project, you can just say sudo apt install in the project name. Why does it not work? So there are two kinds of projects. One is a project which is a binary, right? And then there's a project which is a source. So a binary project like PostgreSQL, Redis and Python, these are all which projects will depend on, but they do it in a different way. And then there's source projects. So some Python dependencies depend on the source of this lip kyro. So for that, you don't have to install lip kyro. You have to install lip kyro depth to actually install the dependencies and the source of this project. So I'll just say yes, and it will be installing it. So there's another tip that if you see a project not getting installed using sudo apt install, try dash dev because it is a different thing, right? Now let's run this command again. Then there's lip pango now. So let's first, let's try pango. There's nothing called pango. Then let's try lip pango. There's no lip pango. Okay, then let's try lip pango dev. Well, there's no lip pango dev. Well, sometimes people just want to see the world burn and they make it hard to find things. So I found research on the internet and this is 1.0 dash dev. So let's just do that. It'll work. So sometimes the set of guidelines does not work. So you have to search it. And this should be in the documentation. So the documentation will be updated. But if you find yourself in a situation like this, then you're always free to visit the Gitter channel and ask and we'll try to figure out what's happening. And this is what's the hard part of the project, right? It is not related to the project inherently, but we have to maintain this documentation about the installation procedure as well. And that's why it's harder to maintain it even just for Ubuntu and it is much more harder to maintain the documentation for Mac, which we don't use and even harder for Windows because it's not even a unique system. A lot of commands are same with Mac and Linux. But anyway, so now we have installed this. Now let's run the create dp command. So yeah, it worked finally. So now it is asking email for super admin. So please add your email. Do not add the email because it's going to send you a confirmation email and password is sitting there or something like that. So add your email, whatever you want. This will be the login for the admin, right? And then add a password. So you can add any password. I'm going to use a dummy password here. And then it will create all the tables required and everything initialized. And then we do the next command to mark that the database migrations have been completed. So now this is done. The next thing now, this written that if you face any problem or authentication with the database, then you have to change the name of the database and everything I have already discussed it. Then we have to start the application for macOS. We don't need to follow this. Run salary. Let's leave that. We want to install, you know, run the server first. So let's run it. So yeah, this was started. Now we want to access it and let's access it in the command itself. So now I'll access the localhost 5000. And this gives me a plethora of things I don't know how to see. But anyway, it means that the server is ready. So one another very the hello world of our server API is basically this command. So localhost 5000 v1 settings. So it gives you a setting for this project. So basically now it's working and there can be other things as well. I wanted to show you the actual app interface. Now if I go to localhost 5000, there's nothing here. The reason for that is that I'm running this in Docker and basically this is running it on localhost. So it's running locally in Docker. So I want it to be running on 0.0.0.0. And now if I go and load localhost 5000, you see open event API server. So let me just increase the font size here as well. And there you have it, the server instance and there's this login, oh my, it's too enlarged. So there's this login information and other documentation you can access. It's a very big page. It's very detailed, but basically here it is. And similarly you can go to v1 slash settings and it will show you the, you know, the default settings and everything. And there's also this thing that we have integrated a very small part of API into GraphQL. So you can do that as well. So as you can see, there's documentation, query, and there's settings and everything. So if I write query, settings, app names, you can see this auto completion and everything. So this is a very cool part as well. Well, the only thing you can query right now are settings, but anyway, this works app name, and if we pay the client and everything, this is auto complete. So this is very cool as well. So this is how we install the server. So we're going to take a little break and answer questions and then also move to front end. So let's then, if you have any questions, then you can ask right now about this entire process if you are stuck, anywhere you need any help towards the status. So yeah, as I can see that there are a lot of things going up in chat. So yeah, that's good. Ari, do you want me to read questions for you or how should we move forward? Yeah, so if you can tell me that just off questions, then I can answer them one by one. Okay. So I guess we'll start with the most recent one. The question is, so this is totally about API endpoints. The real app we see and develop features are for open event front end, quotient mark. Yeah, yeah, this is basically the real app is still the server, the entire logic of how to create events, how to validate and everything is still in the server, but yes, the UI you see on event.com is front end. So the separation is between the server and front end. The server interacts with the database for fetching and querying and validation and sending emails and everything logic handling and the front end is whatever you see in the UI. Yeah, does that answer your question, Shashi Khan? Yeah, okay. Next question, please. Eric was having some difficulty. Eric, can you please open your mic and tell me that it's solved? First let's answer Gerald's question. How's the API server interact with just that's a good question. We integrate it just before any other video solution because it does not require API server to interact with it. You can just put an high frame in the page with a unique URL and that's it, you're golden. You don't need to create some tokens, you do not need to create some API URLs and you just need to access Jitsi via iFrame. So it's very easy. So it does not need integration with Jitsi. But yes, we do store information regarding to passcodes of the sessions, video sessions in regards to Jitsi, you know, rooms. For example, if I set password of a room, then whenever a person loads the Jitsi room on event A, automatically that password is set and if someone else has the URL of the Jitsi and does not know the password, then they will not be able to guess the password. So that's the only part which we handle in Jitsi. Yeah. Yes, and other questions at the beginning also. Some of them were answered by Pratik too. Nicely. Yeah. Yeah. And also, Mario is saying that I just mentioned the advantages of integration with Jitsi. What are the potential disadvantages? The disadvantages are that, for example, a Jitsi room, as I said, it's not protected. So there's no distinction between a speaker and an attendee. Everyone is a speaker. Everyone can do anything. We do not have control on Jitsi as compared to other solutions. So that's a disadvantage and we cannot customize it a lot. And this is generally what we see as disadvantage. Well, if you compare it to with Blue Button, then we cannot even synchronize presentations and a lot of other things. So Jitsi is just peer-to-peer communication thing. There's no hierarchy in terms of rights, moderator rights and everything else. Yeah. Like in a fun way, we can say Jitsi is the big brother of Big Blue Button. Yeah. Or the other way around as well. But yeah, you can say that Jitsi is much more homogeneous. But with Blue Button has a concept of administrators and moderators and normal attendees. Yes. Jitsi does not have any admin option. Like Jitsi controls the admin options, we don't. And then there are moderators as well. Yeah. Like to control the flow of the viewers, Big Blue Button is a good choice. Whereas for mass participation, Jitsi is a good choice. Yeah. Any more questions? Our Arib and Pradeek will be more than happy to answer these. Yeah. And also like we have integrated Rocket Chat as well. So a disadvantage is which extends to Jitsi and Big Blue Button both is that once the meeting ends, once the last person in the group is gone, the public chat erases. It's not stored because that room is available for other people to join as well. You can't own a group in Jitsi. This is a disadvantage. In Big Blue Button, we can own a group, but still the public chat is erased and everything. So that's why we have now integrated Rocket Chat. So if you want to have some conversation and you wanted to persist across sessions, then we recommend that you use the chat feature on the left side panel. And then it won't be erased. It will persist across the entire session and after that as well. And about how far can we go with the integration? Well, it's still Rocket Chat. So there's a distinction between a Rocket Chat user and an Eventier user. We automatically create a Rocket Chat user whenever you access chat. But yes, there are limitations because there's no link. So if you change your name on Eventier, it won't change your Rocket Chat. And there's username difference on Rocket Chat as well. Your profile picture will not be linked. And we will obviously increase the features and linkage of Rocket Chat and Eventier. But still it's a third party integration. We own it. It's in science sense, but still there's only so much you can do with it. Then Hairee would be great to have a follow-up session to look at the integration architecture. I'll be in the discussion section as well. So we can have a follow-up session with that. Okay. Then how do I record session recording? That is specific to Big Blue Button and others like Jitsi has a recording feature, but I have not gone into it myself. So it's more of a question about other video solutions than Eventier. So I don't know the answer for that honestly. Can we integrate Rocket Chat more closely? Could this be a GSOC project or an internship project? Yes. The goal for Rocket Chat is to have per event rooms. And also, this will mean we have to dynamically create the rooms and everything. And it is difficult to synchronize both users, but it is possible. It's not impossible. It's not technically impossible. So it'll be a good project for integration as well, because we anyway need to add a chat platform and to reinvent everything Rocket Chat has already done. I think it'll be a waste of effort. The great thing about Open Source Projects is that there's no thing that we need to only create our own solutions and everything. So we have open source, great open source projects. We do not need to reinvent the wheel. And if we can create all the features we want with integration with Rocket Chat, it will be a great project and it will fit really well with Eventier. Then is there an option to support Gitter.in? The idea being that users team could orient to their code repositories. Good question. This was our goal, but unfortunately, this is 2020, 2021, and a lot of projects are moving away from iFrame. So what have we done is that whenever we integrate third-party solutions into a website, we use iFrame. There are portals coming, but iFrames are the current solution. But iFrames have problems as well. There's click jacking and everything. The download buttons you see everywhere, the like button, face black button, there can be a lot of click jacking on iFrame. That's why people are moving from iFrames and they limit the option to load their site on other sites iFrame. For example, Matrix forbids it and Gitter also does not allow you to load it into an iFrame in another website. That's why we went to Rocket Chat, the first choice for Gitter. Yeah. Any other question? Okay. So we will have more questions in the discussion as well. And we can have more questions after the front-end integration. Let's answer the last one right here, that what are the integrations, approximately, on the roadmap. Then currently, we have not integrated Zoom very well on the platform, the other video platforms as well. Even big blue button, we can have much more control over it. We can show video recordings and everything. And even with chat, it may be so that some other project we find to be much more better fit than Rocket Chat. Even we want to develop our own solution for video conferencing so that we have more control and maybe we can make it much more scalable, fingers crossed and maybe it will be used by other people who may just be interested in video integration and not only on event here. So the goal is to just not benefit our own platform, but also benefit others. So if people will be interested in it, we are also thinking about creating our own video platform. Details are not finalized, but yeah. Yeah. Okay. Well, thank you very much, Arib. And sorry, I want to butt in here a moment, because I see like we have a good interest here and a good group of participants. And we're definitely interested to collaborate with other projects. And we're interested to get students or also hire people for projects. So if you want to continue in this direction, it would be really great. And I specifically wanted to ask the last question to maybe show a bit like in what direction we could head. I mean, we could think about a lot of things, 2D worlds, 3D worlds, integration with more video platforms. And yeah, the limit is the horizon, right? The limit is the sky. So yeah, if you like this project, please continue. And there will be more workshops. And back to you, Arib. Yeah, thank you. So then if you have any more questions, then we will answer them after the front end integration section. And then let's start with the front end part. Let me share my screen again. So now I'm in the front end repository. And this is where most people want to start. I wanted to get the server out of the way, but it is a bit more involved to install and that's why people get deterred. So that's why I just wanted to show you that there are hurdles, but generally you will find solutions for them. The tips I gave are very general, so they can be applied to the projects as well. But front end is the 80-20 section of our project. So 80% of the things get done in the front end, even though it's only 20% of the entire application. It's very easy to install, but also a lot of projects, a lot of people want to be involved on front end, much more than server. So let's get started on that. We go to the local installation page and then these are the dependencies. So first we need to get, we already have that. Then the next thing is Node.js 14.x LTS. So this is something again, which I iterated in the Python part, that this is something which people do not care a lot about. So a lot of people come and sometimes they even install Node.js 13, sometimes they even install Node.js 15. We want to install Node.js 14. That's why we also may want to use NVM, which is Node version manager. It's like PyEnv and it allows you to install multiple versions of Node. So I currently don't even know what is the default version of Node.js on this. So I'll just get started and maybe we'll have to pivot and digress. So I'll go back to the repository. I'll deactivate. Deactivate is a command if you want to deactivate the virtual environment you are in. So as you can see, Node is not installed currently. So I say sudo apt install Node. I put in my password. This is nothing called Node. If you search, you don't want to install Node.js there because it's sub binary. So if you search, you'll find that it should be Node.js instead. So I'll just say yes. So now you see this Node.js is installed. I say Node-version. It's 10.19.0. Unfortunately, that won't work. So let's see what we need to do to install Node 14. Install Node 14. There are multiple installation guidelines. If I go to this Node.js official site, it has an option to download Node.js 14. This is a kind of a visual installer and a package and things like that. I'm running in Docker and I like to work on command line so that there are reproducible steps so I can tell other people to do so. So I'll not use this. The next thing is installing Node.js with NBM. So we'll follow this. So first of all, let me just increase the font size. So first we want to install NBM. So now it's installing NBM and again, if this did not require sudo, that's why another generative which we discussed last time, it did not involve sudo. So it installs in the user directory and thus we cannot access NBM right now. If I write NBM, it won't work. So we have to run this command. So you can add it to your profile like bash dot profile bash RC. It automatically does it, but we need to close the terminal and do it again, load it again. But if I just copy and paste this, this will work now. So if I run NBM, great. So it'll work. So now I can use NBM install 14.15.0, use the latest version of 14, not greater than that. So I just remember that this is what works with the project. So I'll just do this. And I've just seen the command from the example just above. So it's not like you have to go somewhere else. So you do not have to read the entire article. I just opened the article so that you have to use this link and then things may fall in place by default. So now default alias is 14.15.0. If I say no dash dash version, it is 14.15.0. Sometimes it may happen so that you have already installed NBM and you have already installed another node. And now you want to install node 14 because it's different from your default node. So what you must do is then use this command which NBM alias default and then whatever version of node you want to be the default node. So that is how you install node. And similarly, if you install node, NPM is already installed. But there's one more dependency here, which is yarn. So this yarn report needs to be installed. And we have linked the documentation. So if I just go there, so I can start using this command. So let me just copy this and I paste it here. Now if I run yarn, I can see that yes, it worked. It did nothing right now. So then let's go to this part again. You want to clone your repository, but I have already done it and I'm just showing it. So I won't just, I won't clone it. Sorry, I won't fork it, but you want to fork the repository if you want to contribute. So let's just clone it. And also while it's cloning, I want to show that we have this video linked here, installation video that if you go to, you'll see similar steps. It assumes that you have already installed yarn and everything, but it has all the steps that you need to do to install the project. So you can look at this as well. So back here, now we want to go to the project open event front end. So now let's see what the documentation says next. It says I have to run yarn after running CD. So let's run it. It'll install the packages. So the package installation may take some time. So does that even have any other intermediate question or were they trying something and it didn't work or something? I kind of missed in the chat that they want to discuss. Anyway, the dependencies have been installed. So then let's continue. The next command is this. Ironically, this is very clearly mentioned here, but either one of these commands is missed by most of the people who are beginning with the project. So anyway, this is something which we did in the server as well. So again, we copy the .env command. Let's see what's in the .env command. So this is kind of again the configuration you have. It has API host. It has fastboot, disable, and this and that. We will come to what API host means. This is the most important configuration kind of the only one which we need to discuss right now. Then next we copy this and run. So the front-end project, whenever you run it on Windows, you'll probably break it this part, right? As you can see that, hey, getTex is not found. So basically, now I'm saying that do you want to automatically install it? I'll say yeah. So they'll install it, but basically again, okay. So Windows does not have getText. I'll just install it using the default timeline, sorry, default point. So the app install getText. This is something which is not installed on Windows and Linux as well, but in Linux it's very easy. In Windows it's not that easy, right? So if you want to use it on Windows, the easiest thing is to just install WSL. But anyway, if you want to use it on Windows Windows then install getText. There are multiple ways, none of them are very easy like Linux. So anyway, you run this command and you see this message. So now it's done. It will show some warnings, again not very important. Now then this is the notes about getText and everything. Now how to run the project? So you run here and start. Now it will build the project and it is a little bit heavy and so it does take time and resources. I have 16 GB in RAM in my laptop and 8 GB swap. Currently they are completely filled. So it is an involved process. So it doesn't even have any question till this part. And you are seeing these kinds of duplication and warnings and everything. Unfortunately, these are not present in our code. These are present in the dependencies we are using so we cannot do much about it, unfortunately. I can hear the fence pumping up. Okay, so now it's running on localhost 4200. So again, if I go here, I write curl localhost 4200. It returns me something that means it work. Now I go here localhost 4200, nothing shows up. Again, the reason being that I have to bind it to... I am running it in Docker and not actually on my machine. So I have to bind it to 0.0.0.0 and also on port 5000 because I have only exposed 5000 to my machine. So let's say I don't exactly even know that if this one will work, but fingers crossed. Okay, so that didn't work. So then let me search how to do this. So this is something which you might also experience that you do not know something and how to do something. So how to change... Okay, so anyway, what we can do instead, already I've shown you how to install. So instead of doing it in Docker, we can do it in our own actual host machine. So I'll go to get open event frontend and let me change the .env to correct site. So I'll be talking about API was just in a bit once I show you what it is. So beyond start. So now I go to localhost 4200 and here it is. So whatever you see in event.com, you'll get access to as well. I'm currently logged in. You have to log in it into the same, using the same credentials as you used in the event.com. So this is how you start the frontend project. So now let me talk about the .env. So if I go to .env, you can see I have written three API hosts here. So what is an API? So the way we connect frontend to backend is using this API host environment variable. So by default, it is this thing. So let me disable this and enable this. So by default, it is this. This is our development server. And it obviously does not contain the same events which are on event.com. It's a production server, right? So a lot of times people when they install the frontend project, they say, well, I cannot find for example, 2021 here, I cannot find my event here because it's a different server. That's why you cannot find it. So by default, we encourage you to use the development server for creating events and everything so that they do not show up on the production side. So whenever you use this by default, whenever you run and start by default, you won't see those events that you see on event.com, right? But sometimes you do want to use event.com for some reason because it might be an existing bug on an event. So it might be a very specific bug that only happens on an event. So then you will just change API host to api.eventure.com. And you'll have to recompile it again. And if you go to then localhost 4200, then it will work. But let's say you want to use the local server you install, then how do you do it? Because sometimes you want to access the admin section and everything. You cannot do it using api.eventure.com. You cannot do it using the dev server API. So you have to use the local server. So as I showed you previously, if you run your local server on localhost 5000, then you just have to do this. You have to run api host equal to localhost 5000. And then you just go to the project and then you use the same credentials that you used at the time of installation of the server, the super admin email and password, and then you log in and you will be logged in as admin. So you'll be able to see the admin section, right? So generally this is how you link your front to the backend. So obviously when you do this, you won't see any events because there are no events on local server when you start and you have to create your own events and things like that. So this was generally how you install frontend and backend and how you link them. What is the api host? There are the configuration variables kind of leave them to their exercise for the user. This is generally what you need to do to create, install all the dependencies, database and everything for server, install server, run server, and then install frontend and link frontend to the server. So this is the kind of end of the demonstration. Otherwise, if you want to see anything in action, do you have any requests as to what should I do? Then I'll take those. So yeah, any questions then about whatever you saw right now? If you tried something out and what do you have in mind? What do you need? Do you need clarification on something? Harib San asked in the chat if it is recommended in the documentation of frontend that you should also use Watchman but I'm not sure if that part is still relevant or not. So can you answer that? That should be removed from the documentation. Watchman, the project itself automatically has file watchers. So, so in Watchman does not really help a lot. Any other question, requests like even general request about the project or how to get started and everything about terminologies in the project? How to reach to a section regarding architecture permissions? I'm like it's a general Q&A, fireside chat kind of thing. So you can ask anything. So how many of you like at least started to get an idea how to do stuff and was anyone of you trying in the project and how to do stuff? So I see a question here, is the project shifting to react? So we will be having discussions over what to do and we have not finalized the tech stack or something else and it will be gradual process. So you should get involved with the discussion on, get involved with the project on Gita and we'll announce that we are having a discussion. We'll have kind of discussions and debates about what should be done, how should be done and whatever we do should be sustainable in a way that it does not halt the project, current project such that it is not being used and it's not being fixed, developed for a long period of time and also it should mean that we are not working on two projects targeting a same specific component page or anything. So it's not yet final what needs to be done but yes we are moving from to a new and better technology. So no worries Shashi Khan, you can try the documentation specifically on front and it's not that involved, it's not that difficult and if you get stuck you can ask on Gita as well. Okay so anything else, anyone has tried to like do the steps, tried to set up open and server and front end. Okay, San has asked that can you tell how to choose issues, beginner related. So mostly issues are marked with the tech, if you want to review you can go ahead. No please go ahead. Okay so yeah most of the times issues are marked with the tech with say good first issues so you can directly go to those and you can simply search here, maybe I'll share my screen. Okay here it is, so can everyone see my screen? Yes. Okay so you can simply go to labels and here you will find the label good first issue. So you can simply click on that. Okay for now I think it's not marked and most of them are closed. So we'll mark some of the issues at good first issues one of which we just found that in Readme Watchmen part is no longer required so maybe someone can work on that and same with the server. And also I'd like to say that currently we're not we don't have that kind of discussion over that is this issue simple is this issue difficult. Sometimes even high priority issues are marked which I just require one change in class and so once you start seeing closed issues recent closed issues and the PRs you'll try to get an idea that what kind of issues are easy what kind of issues are difficult. So I recommend that you just start with the project first use it and then try to understand the issue try to understand what the issue is talking about try to reproduce it and once you see the merged PRs how the existing contributors are solid you we will get start to get an idea about it. Then any other question otherwise then we will move on to showing the structure of the front end project because sometimes people get lost about it. So does anyone else have any other question before we move on to the front end structure. Okay then let's move on to the front end structure a lot of people have problems understanding some of the technologies I've already touched some part of it. So for example the organizer admin and everything else but generally they still have problems and understanding what the issue create a means about some other things. So let me collapse all the areas so basically this is the project right and this app folder which is what we generally focus on there are the things which which are also important but major or majority of the code is in the app folder right and let me pause it a bit okay. So now we have these all components generally a mistake in terms of learning something new is that we want to learn everything and sometimes you begin linearly and we do it in a breadth first kind of way like I want to learn every bit of something and then I want to get deep into it. It's good in terms of for example if you're learning web development or Android or something else it's not good for a project because projects are huge imagine someone going to you know Google and saying that I want to learn about your search engine and just wanted to learn first about every component and then focus what one component it should take years for him to even get to know all the components. So you don't want to focus on all the components at first you want to focus on individual components when you read an issue and you realize that it's on public page you want to realize where is the public page so first starting point in the project it's not obvious it's router.js so I'll go to router.js and collapse this so this is the file and it shows you that what is the URL structure of the site it lists all the possible URLs in the site and thus it is the best starting point in the site this will show you this structure that there's a login page register page is a password this and that then this public now what is meaning by public so if something is written as logout it literally means that the page if you visit slash logout this page you know will handle this route but if you have written path if this overrides this so it's no longer public but slash e slash dynamic event id so right now if you look in your URL it will be evented.com slash e slash some event id so this route handles it and then there are nested parts in it for example slash sessions slash schedule and then there are slash schedule slash user slash user id which means favorite of a particular user then there's session id details then there are streams currently you are on the stream route so for example this is a good example if a person might be confused for example we may say that there's a bug in a video room and you look at the URL and it's slash e slash event id slash video slash video name slash stream id and the person might think that there's a video route and when they search for it they'll find nothing there so but it corresponds to stream route so stream is the route so if I want to go to this route I have to search stream and then view so I can now go to this right so this is how you navigate to the project you don't look at URL exactly you look at the dot route and similarly if you want to see chat you see okay stream view chat and there it is so this is an example and let's move from here let's say you see an issue which says that there's an issue in the chat you know view chat URL so first you go to the route the js or ts file there it'll be about how the data on this page should be loaded and this is done using the model function and not go into details about the implementation data but I'm just telling that how data gets loaded so in the model function we load all the data needed for the project and how it is rendered video view chat sorry video stream chat what was it stream view chat I think yeah stream view chat and then there's this public stream view and this is the template right so here we write the logic of how the UI should be shown and this is a good way of reaching to where the component a lot of times I see that how I edit something on this page so first you go to router.js you find a particular route you go to the JavaScript file to understand what data is being loaded you then you go to the template file to see that how the data is being laid out what's the layout of the data and there you will see things like this this is a component so how do you reach to this component so there's this components folder so this was about route right and and and the route things are present in templates so templates folder contain the UI of both the routes and the components but routes and components differ so a route lays out only that you know top level URL but if you want to reuse some part of it in several pages you need components so in components and I can see public stream chat so I'll go to public stream and then chat so there's this chat.ts it has you know this logic and if I want to see the template I will go public stream chat so public stream chat so I can see that the app templates component stream public stream so here I can see this component and I have reached here that how do I need to show rocket chat so this is the hierarchy of how you reach to a particular point then there are helpers then there are services these are all ember.js specific but I just wanted to show you how do you do this is this is not specific to ember the hierarchy because this is the same with react.js this is the same with view.js this is the same with anything all of them have a kind of a router.js file if you're using nubstore next then it is file based routing but still it's a hierarchy of routes so you first need to focus on how on which URL you are then you need to map the URL to the actual route using router.js then you go to this route.js file for individual route or its template and then you see what components are used in these templates and then you can reach at that component so this is how you do it the second way to do it is using this ember inspector so for example if you install ember inspector dev tools from the chrome app store also firefox mozilla mozilla firefox store then you will have this ember tab in your dev tools and then you can right click on a particular component and click on inspect ember component and it should work yeah it worked so basically it is showing me that this you can see indexer out right and then you can see that this is event card and then you can see the the profits passed on it the action on it and things like that so this is how you debug to a very you know granular level you want you need to you don't want to find globally but you want to reach from router to controller and and things like that there are multiple distinctions these are ember jay specific so I want to keep it abstract the next way to find something is I inspect it and I see oh there is this header smart overflow ember view things like that class I search it I can also search id equal to this and that you know what happens if I do that I search it and there's nothing like that and if I added id and something like that even it will be more difficult to find find a view like that so I realize that it's too specific so I try to be smart about it and realize that okay maybe ember view is automatically added by ember and I search for it and this still isn't there so I remove it once of them even more and now I can find oh there's this smart overflow component or and and thus it might have been used in this and similarly you you you will have to do some hit and try like like you can search for this and there's nothing like that you remove ui card even fluid you do this so it's it's hard but sometimes you find it so that's why I recommend the first method the router and then the template and then the component or you can use ember inspector that's good as the ember inspector will tell you the component you still have to find the component in the code yourself but this is the kind of thing which you need to do in order to understand the project so as I said you don't need to understand every part of the project I just showed you a specific part about chat right you did not know anything you just saw that how to reach to a specific chat component without without knowing anything about authentication authorization event card and a lot of other things you don't need to so basically this is generally how you do debugging on front end so now that's it from my side of the debugging part do now do we have any questions I see I see someone's hands raised do they want to ask any question so did we have any question in the chat let's see most of the questions are well answered by Prateek I have to say that yeah thank you Prateek and yeah thank you Prateek he's taking good care of our chat yeah so then if you don't have any question then finally I'd say I'll talk about the users so what they're different kind of users and in the system I've already touched on that one is administrator super administrator administrator and they have they can see anything they can see the sales of all events and they can edit event details and they can see users then there are organizers who can who have control of events but they cannot see you know the users and everything else they can see the users of their events attendees they can add tickets they can see the details of their events but not other events and then the last year there are also granular additions and organizers like organizer co-organizer owner and owner can is the person who can only like only he can delete the event and organizers and co-organizers can edit everything but not delete the event neither they can transfer the event to another user and then but these are all group of users who control the event then even in video streams we have modifiers or more sorry moderators and lastly the we have attendees so if you have bought a ticket you can access a particular you know video room if you have not bought the ticket then you are not even an attendee and thus you are even in the lower tier of user hierarchy and you cannot access an events video room and then last even lower is unverified user so if you sign up using an email that you don't own then you are unverified and you may not be able to buy free tickets and there are some other restrictions on the profile as well so these are the user hierarchies we have currently so I hope this clears here about a lot of things of the project and again do we have any in the do we have any question that people want to answer be answered okay so thank you everyone if you have any question I'll be in the discussions room and I hope this session helped you realize how to start with event here we will have another session like this tomorrow and please let others know if they want to get started with open event and want to contribute that there will be a session tomorrow and if you have any other question today you'll try something and if you have any question then you can ask them tomorrow as well so yeah thank you everyone yes it it was an excellent session delivered by Arieb and as a backbone Pratik too and this is not it we also have two more workshops for the same thing and you can see further information about the workshops workshops in the schedule and you can also surely join us there and we hope that you have enjoyed our day one of the FOSS Asia Summit and I'm sure we'll see you tomorrow with more fun more knowledge and we'll learn together grow together so with this I want to end the stream and see you tomorrow folks you want to say something Pratik Arieb no you you you made a great conclusion to the first day of FOSS Asia Summit so yeah thank you everyone and then let's meet tomorrow yes let's meet tomorrow