 Hello everyone. My name is Carlos Macaneta and I'm an Android developer at Southeast Asia. And today I'll be presenting about education app with the HS2, which is called a semi-skeptchier app. For this presentation, I've prepared some introduction. I will be introducing you what is semi-skeptchier. I will tell you about the features and challenge the way I face it during the development and implementation of this. This app was designed with HS2 platform and this app has been implemented to many countries. This app aims to collect and report data from each individual person. The implementation of the system will allow the users to collect the data, improve the ways how the data is collected and managed by each country, which is using MEs for education. In this way, this can help the way the information is managed by each country about education, giving more reports and aggregated data for each student, I can say. I think you need to share your screen still. Oh, sorry, I thought that I was already sharing. No worries, no worries. This is a good introduction anyway. I'll be sharing. Perfect. Thank you. Yes, I will let, as I said before, I was saying that MEs stands for education management information system, which uses the HS2 platform. And it has been implemented in several countries. And this application aims to, in order to improve information management system, management information for taking decisions about the collected data. The implementation of this system will allow the information to be collected and improve data about the education in a certain country. For instance, this information will be aggregated or be reported, how the information will be collected to improve the management of data in each country and that countries that has implemented EMS. So you can be there asking yourselves, what is EMS? In other hand, EMS is an extension of the HS2. As we already know, the HS2 is used for health sector, but the HS2 has decided to extend to education system too. And they will be able to collect analysis and visualize individual data and aggregated data for educational institutions. As you can see, several countries has already implemented HS2 for education, such as Uganda, Gambia, Esotin, Togo, Mozambique and Sri Lanka. Talking about the app features, I'll be introducing you how you can install and the source code will talk about the architecture folder structure, how we can set up this environment of EMS and we will have a little demonstration. But talking about the source code at all, the source code can be found in the Github. We have created the, we have forked a HS2 core CAPTCHA app repository and we have created a module into the core to implement EMS. So the EMS is already integrated with the CAPTCHA app and we have the link that we can share with you to download the repository and the code and you can also see how it was developed and how it is structured. So as I was saying, EMS was created as a module, the HS2 CAPTCHA app already has modules different we can say we have, for instance, stop use cases, commons, form, they are all modules and the EMS works as a module. It's not a long app, but it works together with the, of the things that we have been thinking as a benefit to create EMS as a module. It was about the scalability and usability of the app. Once we use the EMS as a module, we can be reusing some components that we have created, those we have created components that can be reused at the projects. We can say to, let's suppose we have another project that we want to reuse some components that are located in use case or EMS, it's possible to take it and reuse in another module. As I was saying, I was already listening to the benefits of EMS as a module. It, we have been talking about the architecture. We, we have implemented MPVM architecture to develop this application. One of the things that made us implement or choose this architecture, it is because this person dates the implementation of testing. If you want to implement unit testing or another kind of testing, it's easy to implement testing with MPVM and it's easy to maintain. MPVM also has the well-structured and defined structure that can facilitate the devs or the users, navigates into the, navigates into each package to interact with or to take a look about the code and they can contribute with their opinion, ideas, etc. About the libraries that we have used, we have, we didn't use a lot of them. We have used it. The popular PHH2 to collect individual data. We use the PHH2 in the background to test our database and we can take this data to and we can implement the same, the same structure that we have with the corrupt, the synchronization, the upload, etc. That's why we, we use the PHH2 SDK and we have healed for devins injection, JSON, which is JSON parser and we have data store to store user preferences. We have a setup, a future setup. A future setup is something that we need to do before, before using the mobile app. We can configure our programs, we can create our programs, etc., but we need to do extra configuration to make it work. This setup configuration is used using the AMIS configuration application. This application builds a configuration model that we have created to make the app dynamic for some purposes. As we can say, the filters management, for instance, line listing, and some programs that we want to have some extra configuration with them. So we have this application that makes us configure this metadata that can be used in AMIS. It's mandatory to make this configuration because if we don't, we won't be able to use the app properly. Here I'm going to show you how the app looks like. As you can see, we have here the illustration of the UIs. I have here the splash and the login. It's still the same as we have with the core app and the login and the synchronization are the same. And the programs view here, the home view, we have already the same view, but it changes when we choose the student program for this. A different interface for attendance. So for attendance, we have this interface which we need to select or apply the filters. We select the filters we want. We have the period of academic year. We have the school. We have the grade and the section for class. Once this filter and we have a summary of how many students we have for this grade and class. After that, we will face this attendance and attendance view. We will face this interface, which the user can update the attendance status. Attendance status, as you can see on this side, we have three different status. After this, I'll be showing you how it works. I'll be demonstrating you how we can, for instance, set up the process of setup of the data store configuration that we need in the app. And then I will show you how we can use the app. I'll be showing you the mobile application. Okay. As I said, EMS configuration is an application that wasn't, here we have the EMS configuration. If we select this, we will open the application. For instance, we already have some configurations made here. If we go to details, we can see that we have the attendance. This mobile mock-up that we have here illustrates the program. If we select the program, it illustrates the configurations that we do here. If we apply filters, it will don't scroll this background. It will show the background with the filters applied. Or if we configure line listing, it will show the line listing. It will be illustrating the line listing in this view. I'll do a demo of how it works. For instance, I have here a program. I can set up, for instance, save. For filters, I will create one filter. It is organization unit, and we set the level of this organization unit. Save the rate, for instance. It can be section attendance, for instance. Once we create this configuration, we will see this displayed in this section. For instance, for the programs as we saw before, we will have that view with these details I will show you. For instance, we have these details right here with the line listing and the programs in the setup. We will have this interface. Once we create the program, filters, or line listing, this is to guide us how we can show how this works. For instance, if we click the filter, we have school and class created. Basically, it illustrates what we chose in this configuration. Once we create this configuration, we can start introducing our credentials in the app, download it, and all will be set up. Now, I will be showing you how it works in the mobile site. In the mobile site, I have already jumped in the process of login, etc. I will be showing you directly how to take attendance for each student. To take attendance, we will have this interface. We have the program. Once we select the program, we will have the periods, we select the periods of the current year, or we can choose according to our needs. We have this school tree. This school tree loads all the spools that you roll into this user. While we're still waiting for this, this is one of the filters that we have to apply, and then we will follow to grades and sections, which we apply and we get a list of students. We can also search for grades and sections. Once we apply the required filters, all fields are required, we get the list of students. After getting this list, we press attendance to take attendance. As you can see here in the top bar, we have the current in the calendar. We will set the attendance for the current date. We can test something like select another date, for instance, Tuesday. The status is updated according to each date. For this green check, we have present, for this block in orange, we have late, and for this red cross, we have absent. When we select absent, we have to select the resource of absence. Before we save completely, we have to make sure that this summary is the attendance that we talked before. When we take attendance and we try to save, we will have, this summer will be launched to make the user confirm if he wants to save or cancel. Once he can cancel, he completes, he will have these stats. He will go back to this view and he will be able to see these stats. If we change the date, for instance, for the current one, you can see that the status is updated because we didn't take attendance for this current date. Or we can go to also update our stats. As you can see, the summary has been updated and we save, and Macamish Meralda now is late. So this is the process of taking attendance for each student. Now, I'll be keeping after the demo. We have faced some challenges right here. One of the challenges that we have faced was to integrate the EMS into THS2 capture app. Integrated EMS into capture app was a big challenge because we have tried from ourselves just import module because we have created this app standalone before. It was standalone. We tried to import it as a module and we had a lot of issues which most of those issues was about the capability of libraries and dependencies. This app was created in Jetpack Compose and the version was ahead from the current app. We had problems with the THS2 and we had problems to make it collaborate with Degar as we know that the THS2 is using Degar at all and we wanted to integrate the heal, etc. And we had those problems, dependencies, bugs in the build with HPE, etc. To solve those problems, we had to make the ambulance a little compatible with the current app. We needed to integrate some dependencies to make it work and we started thinking in a way to not face this problem in the future if we want to create the EMS into the THS2. And one of the solutions that we found we had to do that was create, we made a fork in the THS2 capture app and then we created a simple module into this world. So creating a module, it makes it easier for the next time creating another module. It will be renaming only the module name and the packages to start another project in the future. This way, the only thing that we need to do is only to keep updating. Once a week, once a month, we start updating only our fork to make it compatible with the current app. That's it for now that this is quite basic. And now I would like to hear you, your questions, your thoughts, ideas, but before going to questions, ideas or doubts, I would like to dive into the code a little bit to show you how it is structured. Sorry. Going to the code we have here the EMS module. And we have the structure of our code as shown before. In the structure, we have data, DI, UI, and utils as our main packages. For the DI, we just created to implement the dependency injection of the app and data. In the data package, we have our app repositories and we have our app module. And UI, we treat everything about UI, all the states of UI, your models, et cetera. And components module that is into UI package. This is for generic components that we have created once to reuse them in another views because we have some repeated components. So I'll be showing you as an example. We have an identity screen in the app that we have. Sorry. Stand for this screen. This screen is an identity screen. So to build this screen, we have created a generic component that we have metadata, metadata item. This is this item that shows the information of the student that's showing the name in this code. So what we have done here, we have implemented the actions. As you can see, we can implement actions or another field that we want. So we have only created this item separated of the put on actions because we can set different actions in this component. In this case, we have created, I think there's buttons. Only the buttons that we have used to set the status of attendance. So in this view, we have here the component that we set up the actions. The actions, as I said before, can be present, absent, and late. So this is responsible of checking which attendance state was selected and which is the status of each one. Because we have here, for instance, the colors. We have the container color that can change when the user makes a selection for user selections at all. So this is responsible for that. I can show you how we, for instance, in the code, we have how we get attendance for instance. Here in our code, we have used coroutines, not the Rx Java. For asynchronous, we have used coroutines. And we, as you can see here, we take the events. For each attendance we do, we are making an event. We are doing an event. It represents events in our modern data. So we load the data according to some information. Once all those information is the date, the user is selected, the program, and we send the list of those students we want to guide the attendance state. Basically, for attendance, this is what we have. For this application. Thank you. Now I would like to hear your inputs, your doubts, ideas, and etc. Thank you. Thank you, Carlos. It was a really good presentation like the app. Some nice responses in the chat as well. There's a question that just came in. And I'll read it. That is, how can we make the app for a new DTSS2 instance with a lower DTSS2 version and Android capture? And what's the effort required to complete that? Sorry, can you come again please? So it's also in the chat so you can also read along. But how can we make the app for a new DTSS2 instance with a lower DTSS2 version and Android capture? And what's the effort required to complete? Right. For this, to make this lower, for this version, we have created this app from DTSS2.8, I guess, or 7. I don't remember at all. But I think that we can start using from DTSS2. I don't know if we can upgrade the version to be using this app because we have started. I don't know if that is higher. I wouldn't be recommending to, for instance, to upgrade the version, the app version to make it compatible with the DTSS2 instance that is lower than 2.7 or 2.8. Okay, cool. I mean, lower versions are generally not recommended if you can avoid it. So if it's a new instance, I would highly recommend just keeping it as high as possible. And then a question from Kasim. What role does the DTSS2 community of practice has in the future of the app? And how helpful did you find the COPD during development and anything in particular you would like to recommend to the community? I think that the practice of using COT, I would say that was easy. Around using Jetpack Compose, we have used Jetpack Compose in this app. So Jetpack Compose itself facilitates us to create COPs or components that can usually use it now or in the future. One of the things that we do is try to update the project, the penises, for instance, to make it compatible with the newer versions, etc. So we don't need to be worried if the app will be compatible with the new penises or in the future or not. Basically, some of the components that we still have here that we have created can be turned into COP to be reused in other modules, for instance. So we will be developing in order to make it reusable. Those components to be reused in other apps and making sure that each component that is created by us can be reused in key and can be maintained as long as we develop the app, making sure that it's not incompatible with the older versions or newer versions. So we'll be using stable libraries to make sure that it works in the present, in the future, or even in the past. Awesome. That wasn't exactly what I asked, or what was asked, but it was a good answer nonetheless. But the question was about the community of practice, which is also COP. So if the community of practice has helped you in any way while developing this app, and also how you can use it in the future for this application. That's probably the question. You want to say how the community, which is the role of community to collaborate in the future, is something, was that all? Yeah, the community of practice. So the RTSU community that we have. Well, about the practicing that they've been using, I think that we have been using practice of the DHS2 corrupt. We had an experience before with them and we tried to follow the same practices that they have implemented in other projects. I think that can make easy to the community collaborate or get into the app. I think, yes, we have been using the DHS2 corrupt practices. Okay, great. Yeah, so Victor gave a clarification in the chat about lower as a DHS2 version, which is that the Android SDK takes care of different versions. So it can go up down to 2.30. So that's, it's good clarification. Thank you, Victor. Let's see any other questions. So I also have a question and is this application currently used in production for a large group of people or is it still a trial? This application right now is being used as a test and with a great amount of people, they are using but we didn't make an official release, for instance, because they is being used as a test for those people. They are still testing the app and we are getting some insights and inputs about what can be performing to make it public to release it to everyone. Okay, great. And are you looking for more testers or are you happy with the current test group? I think that it's great over this current amount of group because we have a lot of people testing this app. We get great feedback and we get great feedback to improve and perform this app. I think that's okay.