 We are now live and we'll start in a couple of minutes. Thank you. Okay. Alice will you allow people from the waiting room? Yes, okay. Excellent. I'm going to let participants in so feel free to start when you're ready. Okay. Okay, I'm saying more and more participants. That's good meeting more people now Joining more and more people Let's wait just one more minute to get more people Okay, hope you guys can hear me. Okay. Yes, perfect. Okay. Awesome. We have more than 20 now I see a lot of familiar names. That's good. We have the great Al-Ghazim Sharafa-Din joining too. Thanks Ghazim for joining. All right, so 30 seconds and we start the The webinar. Okay. Okay Let's go for it then. Okay. So, uh, welcome to the web and android app development webinar My name is Arambis Cusso and I am the HS2 developers Advocate and today I'm very excited to be able to host the session Because we're going to cover a lot of interesting development topics for both our platforms including the latest updates And some of the vision behind the projects Uh, the this webinar is also a non-developer friendly. I would like to clarify that so meaning that If you have an interest for how the HS2 apps are developed, but you are not a developer I think you can benefit from this webinar too Austin McGee and Victor Garcia will be my guest speakers And probably require no introduction at this point But uh, Austin Victor, would you like to briefly introduce yourselves? Just very briefly saying who you are Sure, Victor go ahead Okay. Uh, hi everyone. My name is Victor Garcia. I'm the technical coordinator of the Android PK Component in the mobile team. So hi everyone Thanks Victor And hi everyone. My name is Austin McGee. I know a lot of the people that are on the call here today I'm the deputy tech lead for dhs2 And have been involved with a lot of the development of the app platform Which we'll talk a little bit more about later today So excited to be here and share some of what we're doing Excellent. Thank you folks. So before jumping into the agenda Let me tell you that we welcome questions via the zoom chat And also via the c o p where we have set up a dedicated topic with the live stream Of this event we will be monitoring these channels for questions and trying to address them as as we see them coming. Okay This event will be recorded. Okay, so you'll have a chance to review it later at your own pace and maybe also share it with others Oh, and I almost forgot Let me let's see the those cameras. Let's enable the camera so we can take a selfie together I would like you I'm going to allow you to enable the cameras And we'll take a great selfie of us saying hi. It doesn't matter if you're in pajamas. You can still, you know Uh reveal yourself. So let me just go to participants here more and say Um Allow participants to start video. Okay, so you guys can start video. Can you do that now? I'm only seeing uh Austin and victor Okay, so let's see If we can Okay, I can see a lot of faces right now. This is awesome. Hello guys. Okay So, uh, let's take a really nice selfie right now Mortalize a moment Smile, okay, there you go. That's awesome. Thank you. Thank you for that for that. All right, uh, Let's go to the agenda then one sec Let's just switch to the agenda. Can you see the agenda? Can you see it? Yes? Okay Okay, so, uh We are done with the intro part roughly and the webinar to give you an idea will be one hour and 30 minutes in length Okay, so I will I will do a quick developer recap During this webinar, then we'll have a section with relevant api updates We would like to comment on and these are obviously common to both platforms because we work with the same underlying api And after that victor will take us straight into the app into app development with android Covering the SDK SDK updates to and a burst view of the android roadmap, which is always interesting I would like to clarify that we won't be covering the tracker capture app So this is basically about the SDK and creating apps for android Then Austin will take us to the web app development with our app platform Which is the recommended way in which we will lapse for the hs2 or web apps for the hs2 With a similar format as what I just described for for victor And I will do a small small intervention there There to speak about the new ui documentation and the improvements that we did with the ui documentations And finally, Austin will wrap the event up taking talking about the vision for extensibility that we have with the hs2 So hopefully after all of that we'll have some time to do some open q&a So we can you know take questions from you So that's it. That's the agenda and let's get started with the community update Let's move to the next slide all right, so We've been doing a set of interviews with developers I kind of show some of these during the previous meetup that we have the developer meetup And we got a lot of feedback and a lot of interesting, you know, improvement Suggestions from the community. So I would like to reiterate on that and Later show you A little bit of what we've been doing, you know about it and what we're working on I mean, this is work in progress, but we are trying, you know to tackle all all your concerns So basically what we gather by speaking to people in the community and to specifically to developers that There are some things that could be improved and there are some things that could be added And we are taking a closer look at this and and trying, you know to address any pain point out that we find So we got a lot of feedback from the app hub on how the app hub can be improved and we got Suggestions that we could add user feedback in the ad hub like for example, suppose someone was to comment about An app or provide feedback. There are no channels right now for for for youtube to have that within the app hub So that's a very interesting suggestion We also have the Possibility of people that want to actually vote for specific apps in the app hub to be a core app And that also would be very very interesting And also the possibility to add more assets in the app hub because if you can basically put the asset there The you know the the app itself, but you cannot put maybe a video, you know, or it's or A more complex description, maybe screenshots, you know something like that that would make things more rich but in general the The overall theme around the app hub is that it's very difficult to To receive a feedback about who's using the apps What type of you know Problems are they're running into when it comes to using the apps? How can they get support related to the app? You know, uh, because basically as you are a provider of an app Basically the questions should be channeled to you in the sense that people might be having, you know, specific issues with the app So it's basically more about, you know, communications more assets And more more channels within the app hub So that's that was very interesting to us and we are taking that into account to actually improve the the app hub The other thing that we have That we have here is the funding of initiatives A lot of people mentioned that they really would like to have some sort of funding. So we are also trying to to take a look at that The common thing was faster resolution of jura of jura tickets People want, uh, the issues in in jura to be addressed faster So we were taking an eye on that we were keeping an eye on that and see what we can do about it Um, also there were some mentions about multi-platform mobile sck Basically, what if we want to go beyond, uh, android and that was also very interesting The common theme from almost all developers that I've talked to is more integration and interoperability support Everybody that's doing an app or everybody that's doing a solution related to dhs2. They are connecting it to another system So that's uh, you know, uh, everybody is doing it So this is something where we could very basically improve our our support and and see what we can do Around that Obviously, there are so many different platforms that it's very difficult to target the specific type of integration There can be multiple types of integration that may be more more generic support and what is the best way to integrate Uh, and as I said dedicated app support channels So basically if I publish an app in the app hub, how can I support my users? How can I give them support? What are the channels that I can use to give them support, right? And also more training. There are a lot of his groups, for example, that are trying to build capacity and trying to basically Ramp up their junior developers and they need more support when it comes to Basically providing the proper training to these developers. So that's something we're also taking a look at But enough of what the community wants. Let me see if I can close this. Okay So what how we've been doing about it and let me just quickly Just give me one sec here Okay, there you go Uh, what what have we been working on right? Okay, so we've been adding more events as as you saw you we right now We have monthly meetups and we are also focusing on the next developer Academy which I'm going to promote and talk about Later doing this event And but also we are focusing on the app competition and and we are focusing on the second stage of the developer Academy that we have in the second half of this year. So basically we want to have multiple events for you so you can basically get up to speed and you know Get acquainted with what we're doing and basically Get more more content and more more training We are also working on more developer presence in the newsletter If you take a look at the newsletter, you will see that we have a dedicated Developer part right now and we are also providing developer updates in the newsletter now And you can even sign up for specifically for those technical updates if we are putting out specific Developer news Okay, so We are also trying to provide more content and we started with a series of technical blog posts We haven't published a lot of them, but we are definitely in in a track to do that There's one that haven't been published yet and we are about to publish which is related to pwa So we will try to keep a cadence of content for you So you can take a look at the let's say the state of the art of what we're doing and how to work With developing apps We're also trying to improve the communications. We're trying to provide better communications Be a slack and be in the cp when it comes to technical communications today and communications with developers As you know, and if you saw the let me go back to the to the first Slide pretty quickly if you saw this qr code here if you scan this qr code you can sign up to the Developer slack we have a dedicated slack for developers and I invite you to basically put questions there and Contact me directly there if you have anything that you want to comment on All right, so let's go back to what we're working on We are also working on better organization of the documentation with new examples Also, like defining specific paths for the developer to basically go be a android or be a web And also understanding the prerequisites to start building the hs2 app. So what do I need to? Be in a very good position to start building the hs2 apps I'm going to show you a couple of those examples in in a few secs Also, we are trying to do a faster ramp up a smoother learning and a smoother learning curve That's something that you will see in one of the examples that we show you now Basically getting more up and running quickly And also more training and more incentives We are focusing on the dev academy working very hard to give you a nice dev academy and also on the app competition We're already working on organizing the the app competition for this year Okay, so let me go to Some of the examples That I wanted to show you let's go to To this example for example If you take a look at right now at the documentation if you take a look at use data query hook documentation for example You will find a very simple example right now in terms of code This is one way in which we are trying to improve the documentation and we still need to push this this update but this Basically ready and we are going to push it Basically, you will see that the input information here. It's a little bit more Let's say we added more information But the most important thing here is this in the samples in the examples We are showing you a static query example and this is more a little bit more complete than what we have so far As you can see for you specifically using this hook But also how to do a dynamic query with this hook as you can see here It's a bit it's not in the scope to explain right now the code, right? But basically what I wanted to tell you here is that We are we are going to try to improve the examples in the documentation In order for you to get up on running and basically copy and paste these examples And this is an example of how to do a more advanced dynamic query for example as you can see here Okay This is only one example for example here. We're using pagination for for the results As you can see but Another interesting example is how we are trying to improve the developer website itself And this is one example if you go to the developer website right now, you will see one quick start Where we were showing how to do How to quickly create create a skeleton web app And and that's it. We are not covering android for example, and we are showing you how to Bootstrap or how to Run a container with the with a dhs2 instance, but right now if you go to To developers or not right now, but in a few In a few moments when we push this update actually this have been reviewed already If you click on get started you will see that we are showing you prerequisites for the initial setup So basically knowledge prerequisites. What do you need to know to do web development? And what do you need to know to do android development with dhs2 And here we are pointing to for example a really interesting course that the Institute of Informatics from University of Fossil created Which is a great Pre-requisite or a great starting point for you to start building apps So we hope that with these changes and also the dhs2 prerequisites So basically what you need to know related to this dhs2 specifically to get up and running That you will have an easier. Let's say getting started when it comes to Starting to create dhs2 apps Okay, so now the running dhs2 locally in a container is an optional step So basically there are a lot of other options But basically you can run the hs2 locally in a container as an optional step But then After you are done with this section We basically explain how to set things up to start doing App building and what prerequisites you need to know to start doing app building you can choose a path you can choose to go And create a web app or you can choose to go and create an android app Okay, so here if you click on web app, you will have specifically instructions On how to create a web app and how to work with it There are some examples that assume that you are running a local server But you can change the URLs here to point to whatever server you're using could be a development server for example That's clarified here in the doc and then we have like an android path Where we are basically pointing to the android development guide and the prerequisites for for working with android There's a great guide That the that you can follow and that the guys at the Android team maintain. Okay, so this is our just some examples of that so Let me see if I'm missing something Related to the examples I think that What I'm going to show about the UI section is going to come later So I'm what I'm going to do now is going to pass the word to victor victor is going to show show us A talk us talk to us about the SDK how to work with android So this is going to be a very good intro for people that are interested in about getting started with android So victor, uh, it's all yours now Yeah, hi sermon I'm going to serve my screen. I think you can see my screen now Yeah, can Okay, great. So hi everybody um Well, I'm Victor and I'm going to talk about the updates uh in the android SDK components in the mobile part so uh More before I'm going to start with With an introduction to the android SDK just in case you don't know what the SDK is But I think most of you already know, so I promise is it's going to be very quick like five ten minutes maximum And then I continue with updates from this last year And I will end with a road map so What is this decade very very quickly and very short is uh, it's an android library It is an SDK. So has an SDK you have our Facilitates the development of new applications. So it takes care of Most of the work to be able to work offline Like keeping our internal database and the synchronization and also to communicate with the dh2 instances And abstract the complexity of dealing with the api and the service and the different dh2 versions so if we Look at this wire diagram to have the big picture about the android dk. So we have the api the way api the android dk the dk communicate using the api and then we have the application. So the purpose of the dk is to To separate the application from the way api So the application Or only interact with the SDK. So any complexity any changes in the api are managed by the dk So all of this is provided by the university also So the idea is that You can use the SDK the same SDK that uses the android app The ad to build your own custom applications So if we look at the roadmap from this last year, well, sorry the timeline the release timeline from this last year we had the The last webinar was about we're seeing February. I think that yeah, so and we were about to release the 1.4 And now the releases are aligned between android and the core team so 1.4 was released at the same time that 236 Then we have some patch versions in the middle then 1.5 or 237 Again some patch releases And now we are about to release 1.6 at the same time that 238 So and then we will have the Summer version and the 1.7 at the end of this year. So as you can see we have moved To two releases per year to make your releases per year line with the core releases And then some patch releases in the middle Well, so very quickly about what dsdk does dsdk deals with the synchronization of the metadata to be able to work In an offline mode, so it downloads everything that the user needs to operate without internet connection Uh, it downloads the metadata and then also it downloads the data and uploads the data The data synchronization is in two ways So you can download the data to To break the device and then you can create data on the device and upload to the server dsdk also exposes This information in a developer friendly way So this is just an example about how a developer can easily access, for example, information from any particular event in a tape-safe way so And Then the support Well, the compatibility with different versions and dealing with changes in the api So dsdk support at least the three latest versions but It is possible to keep support for a previous one And it's not a major effort with that For example, the 1.4 support from 29 to 26 and we have to keep the compatibility to for 229 Up to 1.6 in point which is You notice that the compatibility to 229 has been dropped So this is the main function of dsdk dsdk has been has do this from the very beginning And then on top of this we have other services like the online search of track identity so dsdk is supposed to to be using an offline mode, but for in some cases it is very useful to to search both offline and online like for example in the case of searching track identity Also dealing with error management Because it's very common Well, not very common, but it will happen that if there are changes in the metadata for example or Enrollment that has been created twice or an event that is not repeatable. If I add The server rejects the synchronization. So it is really important to to identify the error and to present these errors In in a way that the user can understand the error and fix it. So this is also managed by dsdk And also as a designation by sms Because yeah dsdk is designed to put it offline But you need internet connection to synchronize the data to the server But there are some cases where You don't have internet connection for a long time And it is very it is really really important to report the cases on real time So for this you have the synchronization by sms That is required some extra configuration in the both in the server and in the mobile But yeah, that's a possibility that is there We also have the this application this web application called the android settings app That is really useful to control To have a remote control of Some of the parameters in the android application and in the android dk like for example If you want to you can decide the number of rocket entities or events To be downloaded in the new synchronization or the number of preserved values And more recently the analytic tables to be displayed in the application Or the appearance some appearance configuration like the spinners and things like that So this this web app is really useful to control the Remodely some settings in the apk Encryption this is an extra security layer because android And it already offers security The system security mean each app is separated from other apps and this is Built-in in android, but if you want to have an extra security Layer you can enable the encryption of database with Which has a very small impact in performance And utility classes that Now dsdk is incorporating gradually Some business logic of this as to like for example To detect one when an enrollment is inspired So no more events can be added to that enrollment Or if an event is repeatable or not Read write the access layer for users. I mean all that for that logic That usually is managed by the application Now the database Starting to incorporate that logic So all of this has been in the sdk more or less from the very beginning and In the first version so now let's take a look at the At what is new From the in this last year I mean from version 1.3 to 1.6 that is about to be released. It's not released yet, but it will be released soon so So there are having some improvements in the authentication So we have the These two mechanisms to authenticate a user the basic authentication based on A username and password So what we have improved here is the use of cookies to improve performance That is a very Small thing, but in yeah, in the proofs the performance And also the open id connect support So The server would be attached to has been supporting Open id for some version So now in the sdk we have add the ability to use these authentication mechanics To use an external provider That's as good as for example to authenticate This This authentication requires some extract configuration also in the server Some changes in application In the manifest of the application So for this reason it's not a built-in feature in the Android app That is released it is supporting the sdk, but you need to do some things in the in the manifest More things about You say account management There is this new feature that has been requested by the community for a quite a long time the multi user multi server support Because sometimes I mean quite common We have for example a server for tracking data and another server for aggregated data and Now with this multi user multi server feature you can switch between accounts Without losing the the data from the other account. So you can keep Several accounts in the device at the same time only You can only log in with One in one account simultaneously But you can switch very quickly between accounts So this decade keeps different databases and different Folders for every user every per server user So you can we can have multiple accounts at the same time Talking about the tracker part We have the support for working lists What is called in the in the api they are called tracking entities as filters or event filters So yep this again Don't now don't load the working list and also abstract the The filtering and the use of the working list when you want to filter by this working list It offers a method like this one. So you can just provide The uid of the filter you want to use Just call the query method Also some improvements in the in the search Like for example To detect if there is any any reason why the search has failed Now these decay identify that reason and expose that reason to the application So you can inform the user for example in this case that there are too many results So No result is shown because of that. So you have to narrow down the desert And also new filter methods and some order by process In the query Also a relationship Any kind of relationship now it's important in this case, you know that Starting on version 230 of which is to I think the relationship model change Now we can have relationship between track identity enrollment and events any to any So now the support Any kind of relationship? I need to load all of them or to upload Uh any kind of relationship Uh, we have also the new tracking porters in the tracker path This has been a big change Uh, it's integrating this new tracking porters Also because it is used in a asynchronous mode so it is It's a big change but for the application is Completely transparent. I mean the api in dsdk has not changed So the application use the upload method in the same way that before And um So now in dsdk we have the two important at the same time So you can decide if you want to use the old one or the new one by by Using the and recipients app. There is a textbook where you can decide if you want to use the new one or the old one In the dsdk this feature is only available When the server is at least the version 238 otherwise Although the The check in the service app is activated. dsdk is not going to use any one We have also break the glass support And because previously when we have a ti that is protected Uh in a protected program and is in the search scope And dsdk was not able to notice that ti So now yeah dsdk does it can notice that target entity is protected can detect the error Also, it has posted a method to break the glass to give a reason why you want to break the glass and also if If the target entity is uploaded to the server sometimes After it was uploaded and the permission has expired it also managed that situation So it can be uploaded So break the glass support. This is in the last version Uh More recently the local analytics part that is This is a big block that has been added Uh progressively so for example in Well before 1.4 we had we already had the inline program indicators in the target entity and then 1.4 we add the The analytics in the ti The id context just for example to show the evolution of values data value or a prime indicator In a repeatable stage. So you can so you can see the evolution of that values And this is in 1.4 Then we add also 1.4 the Indicators in the data set So this this indicator are those indicators are shown in the data entry screen And are evaluated using the information in a particular data set Uh, and they are useful to show at the moment of data entry In 1.5 At the end of last year We add the the raw analytics engine This is what we are what we usually understand like the analytics in general This is these are the analytics that are shown for example in the visualization app in the in web and Yeah, we can we can imagine this like the report tables of the chart So they are the dimensional analytics when you can For example provide I want to analyze this data element is from indicator is indicator Uh, in this or you need this period With this category is aggregation and also combined dimension Uh, specify filters as well and aggregating periods in your unit three So this is what we usually understand by analytics. So this was added in 1.5 There are some parts that are missing yet, but most of the functionality is there Uh, on top of that we have the visualization So this video also understands how to deal with the visualization object What was previously called the report table or chat chat So you can provide the idea of a particular visualization And this is a get the different part and give you the results the evaluation of that particular visualization And more recently we there is the support for legend set So you can decide also if you want to evaluate a particular visualization or just a raw analytics evaluation using a particular strategy like the legend set by item or Fixed legend set for the whole evaluation And here you have just an example of analytic objects Built using the andrey stuff. Yep. So this is these are the new features From this last year. So now Let's talk about what we have in the roadmap And so First of all we want to be To implement the missing functionalities in the local analytics component like for example the Tracker data elements are not supported yet Promindicators they are but tracker data is not so We have to to complete the functionality of the local analytics also for example with the boundary And next the new tracker exporter Because the new endpoint for tracker are for both Exporting data and importing data now. We only support the tracker import not the sport And also the support for images and files in general And because now only images for tracker data are supported but not for aggregated So we want to continue with that functionality And to also to give them The the possibility to decide What metadata you want to download And currently and you take a download All the metadata that is Served to a particular user For example now you can control the metadata that is downloaded Using the setting in the web But maybe yeah, we want to expose a more granular or selective synchronization Yeah, just in case you don't want even if a user has access to some metadata is not interesting for a particular And also improvements in the performance in general This is a We are working constantly in this part to make the synchronization more More efficient And this is a something that is done in all versions together with the backing team And yeah, we get this is something that has been in the roadmap for a while Because there are some components that are used In every android application, for example the organization unit three or The data value input And also more business logic and I talk about if you see I talk about I mean this side where if a particular enrollment can be added or not depending on if Target entity has an enrollment or not Or Espiration of events things like that that are quite complex. That is pure This is two logics We want to include all that in the Peer to peer synchronization, I mean synchronizing Data directly from a device to another device. This is this has been requested by the community in some cases And yeah, we can do that more or less with the QR codes, but Yeah, we want to have a more robust way to synchronize data between devices Online offline this Now the case Is designed to work fully offline and maybe sometimes we we know that There is internet connection An stable internet connection. So maybe it's better to work online and in general to to catch up and to To match up with new features in this case too that are Relations, so this is also in the Roma band is a constant work in this case And just to analyze resources in this case we have the skeleton app If you want to start another application You can use this as an entry point It includes the basic functionality to And the sdk as well just the loading and a few more things And also we have a separate branch in the skeleton app with some use cases just to build to Yeah, to see how the sdk works to see the sdk in action And here you have the information for the skeleton app And then resources about the github links the docs the skeleton the gira and the in the community space in the the cop So, yeah, that's all from my side Great victor. Thank you Um, we will share these slides later. So, uh, you will be you'll have a chance to take a look at those resources directly, okay So, yeah, so we don't need to paste those in the in the chat. We'll share that later. Okay, so is there any question right now? Is there any android developer in In the session? Uh, or any question I do have a question by the way, how maybe I can get started to break the ice so, um As you know victor a lot of people Um, especially new android developers are like Kotlin native, right? I mean, they basically got started with Kotlin and I just wanted to hear your position with regards to Kotlin whether you have some Kotlin code in there. Uh, what do you think about it? Yes, uh, okay Yeah, in this case, we are migrating all the code all the java code to call in right now this is um Well, we decided not to migrate all the colors once because it would be a huge effort But all the code all the new code in the sdk or if we have to modify some classes We do that in Kotlin and our yeah, uh we hope to have the the whole Code base in gritty to Kotlin. I don't know Not this year my baby Okay, like that now we have we are in one 25 percent of the code in Kotlin Okay But it's important for us. It's really important to keep the compatibility with java. I mean Kotlin and java quite Interoperable So we don't want to force The developers to use Kotlin Even if we strongly recommend to use Kotlin, but we don't force to do that too If you want to use java you can Okay, yes in the roadmap. Yeah, we have this Kotlin and maybe Kotlin multiplatform even has a multiplatform solution and thing that we want to explore But yes, Kotlin is I think it's a way to go in other Okay, perfect. Is there any question from the From the audience anything I want to put in the chat or be at the c o p Um Maybe is there no if there are no questions one final question for me. Um, I have some Pretty prerequisites or not not prerequisites But basically some of the libraries that you've been using and that would be good for people to Basically be familiar with if they want to do Under development and I just wanted to To verify with you whether that still Stands right where this still is true. So basically what I have here is that Uh, you use our rx java to facilitate the asynchronous treatment of some methods. Is it is that still true victor? Yes, it is true. Um, okay And usually in dsk for the same method you have two versions the reactive version And the blocking version. So it's up to you to decide which one to use But if you use the blocking one, yeah, you have to deal with Putting that in a background Right, right, right. Absolutely. Yeah, uh, I I did some under development some time ago. So okay, so, um Other libraries you're using sdk are dagger for dependency injection jackson for jason parsing retrofit and You okay htp client for api communications. Is that correct? I mentioned dagger jackson retrofit and okay htp client Yes, all of them are using dsk and But they are not Maybe they are not that requisite in the application. Maybe they are more internal in dsk Okay, uh, yes, if you want to use dsk to make api calls Maybe you have to be familiar with retrofit and okay But it's not okay Okay, excellent And then when it when it comes to the the database, uh, are you using sequel light? Okay Okay, so let me see if there are no more questions we can give the stage to austin Austin all yours sure Thanks adamant and thanks victor for the the overview of the the state of the android sdk um I'm going to talk a little bit about a few different things. So i'm going to talk about the web api the web platform and then a little bit about the the overall vision of extensibility in dhs2 which includes the web api the android sdk interoperability with external systems And a lot of other things that that i'll get into in a in a in a couple minutes Um, i'm going to try and try to do it pretty short and high level So we're not going to get into too many technical details of the different things that i Um, i'm going to go over. So we'll have some time for for people to give feedback or have questions Towards the end as well. Um, I see we have just over a half an hour left on this webinar. So I'm going to with that i'm going to dive into Uh talking a little bit about the web api to start us off. Uh, so i'm going to share my screen Yeah, we can see Great, you should be able to see this in full screen as well. Yeah Yeah, so i'm going to start off, uh, as i mentioned by talking about some updates to the web api that have come about In the last six months, uh, or so in 237 and 238 Some of this has been Obviously the things that are in 237 we've talked about before but i'll go over it again more from a developer perspective, um, or from The perspective of someone that's thinking about extending dhs2 and using the rest api to do that Which is the the target for for this uh this talk here today Three updates that i'll talk about one is personal access tokens, which were an exciting addition in 237 increasing security as well as the Ability to give fine grained access to different integrations, uh and different things that might talk to the dhs2 rest api Um json patch is also a way to do partial updates of objects Which can be quite troublesome in dhs2 when you start to get very large databases in particular Um, or you have nested collections, uh within within an object And and finally some very exciting datastore api improvements that are coming in 238 which should be released very soon And and those make it much more powerful and much easier to build Applications and other types of extensions on top of dhs2 and store your data into the the datastore Which is a basically a Uh a free form Place to store data for applications So first off i'll talk about personal access tokens And again, this was introduced in the 237 release back in, uh, believe it was october of 2021 And This is a a token based authentication that you can now use to basically create a A dedicated token, uh for authenticating against the rest api And that is associated with a particular user account. So each user can create their own personal Access tokens. That's why it's called a personal access token Um, they can create more than one and they can then specify different restrictions on each of those Tokens that they create, uh, this allows you to Create different tokens for different purposes give them different permissions For example on the right here, you can see that you can restrict each token In a number of different ways, uh, so this is a token that we're generating for Use in a script that runs on the server Um, we can restrict the the ip addresses which are allowed to use that authentication token We can also restrict what that token is or someone using that token is allowed to do so that in this case We're saying the this token can only be used to get information and not to change anything So that is a nice security feature of the personal access token is that you can restrict what it can do Even if the user that generates it has more more permissions than Than just being able to read things You'll see that there are two different, uh Contexts that can be used to generate this token One is for server script context, which is should be the most common one here You can also create a browser context and restrict that based on the refer or the URL that is making the request to dhi's too But that's not recommended because even though it is more secure than using basic authentication or Uh, cookie authentication with cores, etc It still uh is has the potential to leak some, uh, some of that authentication So it's recommended to always use a script or server context unless you really know what you're doing and the data that you're Providing access to is is publicly available. Anyway, for example a dedicated dhi students that serves as the back end for a public portal and The other really nice feature of personal access tokens is that each one can be Easily revoked or deleted. So if you have a personal access token that you've created That is being used and you realize that it Was leaked and someone has access to it Unlike basic authentication in which case you would need to change the password of your your main user account Or delete the user or deactivate the user or something like that. You can actually remove or revoke a particular access token that you think has been compromised or that you think Is doing something that it shouldn't be doing So this gives you more fine-grained control over what uh, yeah, what what you can do with Individual integrations or individual uses of the rest api It's also recommended To when you're when you're using even though you're using personal access tokens which have more control over what they can do It's still recommended to create a dedicated user when you create an integration to Specifically for that integration that has only the permissions that that integration needs so you shouldn't be As this the screenshot on the right here was actually taken with the admin user So it has the all authority and that would not be recommended a recommended way to to go about creating this because the That all authority is then granted to whoever has access to this personal access token So instead it's it's preferable from a security standpoint to Create a separate user specifically with the the permissions that are needed for whatever integration or whatever Scripts that you're writing and and then to also create a personal access token to actually do the authentication with that user and just a another kind of security layer there to to prevent unauthorized access to your dhs-2 instance Another feature that came in 237, which is quite exciting is json patch. So it's been quite a while that there has been Traditional HTTP patch support in the the rest api for dhs-2 But it hasn't always worked Completely because the the way that patch Works is you you send an object that has some Some changes that then get made to the the underlying object that you're sending it to and and that's quite difficult if you're working with something that has A list of things because you don't know there's no real way to remove things from that list or to update things within that list Or to add new things to that list at a specific place or those types of things So this introduces something called json patch. Um, it's based on a standard json patch syntax although It is uh, going to be extended beyond just what json patch supports out of the box i'll get into that in a minute, but It's based on this this concept where instead of sending a new object that then gets merged with the existing object You send a set of operations. So you'll see here the patch in the middle on the right Has three operations that say I want to replace something at the path vass and I want to send the value bar And and I want to add something to a list which is called hello And I want that the thing to be added to be world And I want to remove something at the path foo Um, so then you can see that the the object before and the object after have had these three operations applied to them Uh, and then you get the result. Um, so this is a more Easier to follow way to to do particular operations such as adding something to a list Removing something from a list etc. Um, then was previously possible. So this was again introduced in 237 and and is is quite a powerful way to work with objects and do partial updates particularly with nested collections The for for all of these I will note that I've linked the documentation So there's a documentation for the user guide as well as the api authentication guide for personal access tokens There is a link to the documentation for using json patch when updating objects through the rest api And and now I'll talk about the datastore api improvements as well Austin Austin, we have a couple of questions about paths. Can we ask them now or or later? Yeah, let's go let's go ahead and do it now. Okay, so we have james boyho is basically asking if the Saint expired that he can see there is 30 days if there is a way to make it more than a year for example Oh, sorry, that was that was probably for this one here, right? Yes. Yes, exactly. Um So the Expiration I believe you can set that I'm gonna going to confirm this just right now. Let's go ahead and actually You can see my screen here. I'm actually going to go ahead and do this live so that you can go ahead and see it See it being done. Um, we're gonna do our 237 server and play and and we'll oops page is not working One moment Play should be working. Yeah, here we go. Um, so here I'm gonna sign in as the admin user So this you'll actually see also here the use of A user that doesn't have the all authority and So let's go ahead and go into and actually to do this you go here and click on settings So here we have the user settings for this particular user And we're going to go into personal access tokens and now we can generate a new token So we're going to do the script context and these are the options that we have here. Um as as he said 30 days is one option. It is recommended to have an expiry expiry date and then to rotate your your token so that it is less likely to be Exposed, but you can also set a custom expiration date. So you could set a particular date when that token will expire So that hopefully answers your question and and this here is Uh showing a A case where This user has a lot of authorities. It doesn't have the all authority But it has a lot of all basically every other authority possible And that's a little bit of a warning sign if you see a huge list here. It means that the Uh, the token that you're generating will have the ability to do things that maybe you don't want it to do So you should probably create a separate user that only has the specific authorities that should be granted to that integration Can you can you show what happens when you go to? expiration custom Yep So we go to expiration custom and then we can put in a date here. Um, so we could we could put that in 2026 if we wanted to um, I would recommend not doing this but but you could do it there And then it would expire in in four years Okay, awesome, and we have another question same topic from gift Uh, can personal access tokens be limited to specific api resources? Not currently so right now, um, they are limited to basically whatever the user can do and then whatever Http method is selected for that token. So get posts put patch and delete um, and uh That is something that we've discussed that would be nice to have the ability to restrict Certain certain endpoints or certain parts of the api that can be used with this Token, but that's not something that's currently supported. So hopefully that'll be something we've had in the future Okay, we can go on then Great. Thank you. Awesome. Yeah, thank you So this next one is pretty exciting as well, and I know a bit behind time So I'm gonna I'm gonna try and rush through this a little bit um This is improvements to the data store. So Many of you probably are familiar with the data store for those of you that are not. Uh, it is basically a A free place to store information that can be used by applications to basically create a a A free form database just to store some information just to retrieve that information later to share it with other people And there are actually two different Data stores There's one that is shared across all users in the system and then can be restricted from there to only certain users And then there's also a user data store, which is specific to a particular user And so it's useful for storing settings or configuration that a user Is is setting for themselves and themselves only um It's been around for a long time But it's been a little bit limited in what you could do through the api in particular To be able to to use this as a as a pretty powerful data store One of those things is the ability to Select a a set of Basically all the keys within a namespace and then extract certain fields from each of the objects at those at those different keys And previously when you use you would have to send one request to get a list of all of the keys in a namespace And there was no pagination. So if that got very long, it was also very unwieldy And then for each of those keys, you would have to make another request to the api to get the entire object And you couldn't restrict what parts of that object you wanted to retrieve And so now we have a very powerful field filtering available for The request to the namespace collection and you can actually extract fields from Within the each of the objects at each of the keys in that namespace So you get the key as a as a Key in this object as well But then you can extract specific fields like the name as well as deeply nested fields if you have if you have large objects So this is a much more powerful way to to to pull this information out in in one request and We also support pagination now. So This namespace key will be paginated by default which allows you to Select only the first 50 items and then the next 50 Just like you would in other places in the dhs2 api And this is quite powerful because it's something the data store is not something that is Strongly typed or or has a strong schema associated with it It's whatever the application developer wants to put into that data store is is what's stored there So this is a very powerful kind of generic way to to extract information Other things that have been added are filtering and sorting Which you can do in other places in the dhs2 api, but previously couldn't do in the data store api Those are now supported as well. So you can find out more about that in the in the documentation at the Yeah at docs.dhs2.org Which is linked here as well. So that's it for the api updates. Did we have any Questions come in specifically on this topic or should I move on to that platform? No, please move on. If you guys have questions, please put it in the chat, but so far so good. So you can move on Great. Thanks Um, so now I'm gonna do a very very quick introduction to the platform for anybody that's not familiar with it Those of you who are familiar with it probably have seen this slide for about four years now And it's basically just an introduction to what is the app platform? Why does it exist? There's a lot of things that a dhs2 application needs to do Before the app platform it needed to do all of those things itself After the app platform It instead just does the things that are specific to that app and a lot of the things that are shared among all The applications are extracted into a common shell And and this is the same tool that's used for dhs2 core applications that are developed by the University of Oslo and included in the war file But they're also Available and and used by many third-party applications that are not developed by the University of Oslo So there's a common set of tooling a common set of functionality It makes it more consistent for users who are coming to a different app within dhs2 to understand that this is a dhs2 application It works in a in a consistent way that I understand But it has the ability to kind of adapt to the the specific use case for for which that app is being developed and there's a A pretty this is a very simplified version of what happens But you basically can take your source code your dependencies your strings you run a single script And you generate a full application including all of that common functionality that goes around the application that you develop So it makes it much easier and faster to develop a custom application You don't have to think about all those other things that are going on under the hood Which also makes it easier to maintain and to keep up to date with the latest versions of the app platform in the app shell and the the consistent standard functionality for dhs2 apps dhs2 apps, which reduces maintenance cost over time as well Finally, there's a Basically a workflow that you can use With the tooling that we provide for developing dhs2 applications Herman showed a little bit of this in the the getting started guide for the On the developer portal and there's a lot more documentation on there as well and but Basically, this gives a developer tools to spin up a local dhs2 instance to test their application As well as to install their application to that test instance Or to publish it to the app hub where it can then be installed directly by dhs2 instances all over the world And they will also get notifications when there are new updates available for that application So when you release a new version Anyone who has installed your app and has connected it to the app hub Or downloaded it from the app hub will get updates when when a new version is available Which is a really Streamlined workflow compared to what what it has been in the past with manual distribution So all of this has been supported for a while now in in the app platform This is just kind of an overview for for anyone that wasn't familiar Now i'm going to talk about some of the things that have been added most recently to the app platform One of those which we've talked about a little bit in the past is offline support So there is support for Basically turning your web application into a progressive web app which works offline It also works as kind of an installable A Browser based application on several mobile devices as well as desktop applications Can be basically created as a shortcut to that specific app And this is done in a very simple way. I can show you the blog post which is also linked here Um, but it's very simple. This is this is the most basic way to turn your Application into a progressive web app is just to set this single line of configuration in your dq config.js file Under the hood there's a lot going on in terms of Doing caching of data Collecting all of the static resources and downloading them before the app goes offline Checking for updates that are available for the application and showing those to the user allowing for also more advanced functionality such as Turning on and off caching for different parts of your app and all of that is Provided out of the box by the the app platform in a consistent way And so that's a very cool new feature that was introduced in 230 around the 237 time frame Into the app platform and is available to all apps today um, the second feature is in memory caching which is Going to be expanded significantly in the near future, but basically it allows you to De-duplicate requests that are going across the network so it reduces the amount of data that needs to be sent back and forth to a dhs2 server from your application um, because if it's already in the cache it will Be able to look up that information in the cache instead of going across the network to dhs2 which is particularly helpful in cases where a device or An application is running in a place where there's limited or no internet connection and And then the final one here is json patch support. I talked about that Json patch was added to the api It's now also supported in app runtime mutations So you can have a type json patch and you can send those that list of operations as a mutation in a use data mutation hook or In other mutation The imperative calls to engine dot mutate or other other ways to send mutations across the network That's a little bit technical, but that's basically We we now support that in web applications as well in our in our common tooling Just wanted to quickly Shout out to a couple of the components that have been introduced in the last Several months in the ui library. These came out about end of fall Last year, but they've also been updated and improved quite a bit since then And they have quite a bit of power between them. One of those is the sharing dialogue, which you may recognize It's an updated version of what Was previously available for sharing metadata and data In the maintenance app as well as in many of the analytics applications This is now available for anyone to use In their own apps if they would like to to support sharing In a in a custom app. And similarly, there's a data table, which has many Cool features such as sorting and filtering and those types of things Selecting multiple select and and basically formatting data in a in a way that's readable and consistent And displaying that to the user. So this was also added as a common UI component that you can use in your web applications There's also been lots of fixes and improvements that have come up Or been introduced to the to the ui library over the last several months Um, yep Now I will turn it back over to hermon to talk a little bit about an exciting update to ui library documentation Yeah, I think uh, there's one question for you hosting. Maybe we can talk a little quickly. Uh, are there We have we have two actually one from isaia neabuto is saying are we still supporting standard reports? If yes, is there is is there a guide on how to use the visualization component in the standard reports Previously it was fairly easy to create the standard reports using the visualization plugin So we do still support standard reports in general. Um, there is an app for standard reports Um embedding visualizations is something that I'll get into in a coming soon section very very shortly And but that's not something that is as easy to do as it once was and that's because of the Change in the underlying technology of how we how we expose those plugins From the application. So it's it's not It was never fully secure to be able to do embed a visualization including all the authentication and things into a A just a standalone website, um, which was the previous mechanism for doing embedding So we're implementing now a secure mechanism for embedding plugins or visualizations into Places like standard reports, but also places like External public portals and those types of things. So that's that will be coming back soon Right now it is supported in a few places for a few of the different visualization types that have been around for a while But the new visualization types will be, uh, supported in the near future Okay, and thanks. Thanks. And the second one from gift. Uh, are there any plans to support custom auth? Like a pat for the up runtime for standalone apps custom off like Personal access tokens for the runtime for standalone apps Standalone apps I see, um There the short answer is yes, um It the the longer answer is Not exactly maybe in the way that you're thinking. Um, so we are looking into supporting token authentication Which will not rely on cookie based off for standalone applications. Um, there is currently support Or kit could be support for oauth. Um, but that also requires cookies and Um, and core support. Um, so using token based authentication from standalone app platform apps Is on the roadmap Um, it hasn't been highly prioritized because we don't know of that many productions standalone applications that are out there So gift I would love to hear more about the Where you're using standalone applications that maybe talk to multiple dhs two instances or Run on a different server or something like that And so yeah, we can talk we can talk a little bit more about that but that is on the roadmap Support token authentication, uh for cross site Standard off Okay So maybe while I cover the UI components and the changing the documentation You can monitor the chat to see if we have a follow-up question by by gift I'm going to share my screen now. Thank you Austin. That was awesome. Thank you for the presentation Uh, and I will give you the word back to you for the uh the next section So one sec Let me share my screen Share So can you see my slide here? Yes Yes, okay So I'm talking to very quickly cover the merge of the design system on the UI docs because we don't have a lot of time We're running out of time quickly This this is because it's interesting and exciting right, but anyway, so, uh, I kind of Pre-announced this some time ago during the meet-up. Uh, I think was it wasn't the Like maybe the one like two months ago So basically we were working on merging the DHS to design system Which as you know, it's a collection of design principles and and the UI library That uh, we offered to create, uh, DHS to apps So we merged this to the design system was on github and the UI docs and on the web We did a full merge now. We are offering all live UI components no more images The design system basically was showing Static images in there and we are focusing more on supporting developers as you a component you as UI component builders on the DHS too So we want to make this integration is something as useful tool for you when you are trying to Work with UI components and maybe expand your component extend your components, etc So we are putting the component API, which is a description of the API of each components together with usage guidance for the component Like when you should use it when not to use it, etc So, uh, in order for you to take a quick look at the at the comparison, you know between The old way and on the new way and this is already live if you go to UI dot the HS2 dot and you right now you can see this changes already because when we Briefly talked about this. It wasn't live yet, but right now it's live So the in the old way we were separating UI docs and the design system two different places two different things UI dot the HS2 dot and you Was the place for the UI components and and github was the place for the design system The UI dot the HS2 dot and you site was based on doc site what we call doc site So technology technology that we are deprecating for the use of doc use source We were embedding images in the design system as I mentioned before And we were basically targeting the demo part, which is a storybook part of the of the solution As both a documentation tool and a development tool was kind of a mix now our new focus and and the new way Is have everything in one place You have to go to one place to actually check this out, which is UI dot the HS2 dot and you We are basing all of this on doc use source Which is the same system that we are using on for example on the developer website So we are integrating, you know our technologies We are embedding live components and I will really quickly show Show that in a sec And we are also Targeting the demo site and the storybook part of the solution as a development tool So mostly as something that can help you develop components or extend extend components So i'm going to do a very quick There you go very quick Demo, uh, let me go to The this so here you can see UI dot the HS2 dot and you And uh, if I go here for example, you can see everything is here. You can see principles patterns, etc So basically parts of the design system. You can also see components here And if I go for example, uh, to uh file input Here You might think oh, this is probably an image. Well, it's not if I click here I'm actually, you know, enabling the seeing the component in action, you know to upload a file So, uh, if I go to menu for example right now Uh You can see That the components now have usage advice when to use the menu component And this is obviously live any menu components when to use it when not to use it Right formatting and then if you keep scrolling you always see besides options, etc The icons that you can use, etc. You you will always see the API reference. Well here it's empty But for example, if you go to bottom for example, I think that I saw it there Let me just take a quick look here What I here I think the API reference is missing. Okay Model maybe And in general the API reference should be here. Maybe I'm missing something Here, let me see. Let's go to, uh This might be something we need to debug Yeah, yeah, I know. Maybe maybe it's like a need to refresh one sec Because I was actually checking all the API references before so Yeah, uh, let me check model or model and some components, uh, are linked into storybook sections And that's interesting. The storybook section is in demo. So for example, if you go to, uh, Uh, demo Right, you will see that we're linking to to something very very interactive But you can see here you can see controls actions, etc And for example here if I go to input to give you an idea input I have the input here and I can play with it For example, if I if I go to actions here and I type whatever ASD So you can see that in the console in the actions. I'm seeing The live output of that but also very interesting for each of these components. You can take a look at the jsx code to actually create a component Okay, so Also, uh, there's a canvas here that you can see where you can basically do a lot of things I for example, I could zoom in some out, etc And basically play with a lot of parameters for the canvas, specifically how the Control is displayed, okay I'll take a look at later at that api issue there But basically the idea is that you also have in the In the previous page The api reference for each component Okay, so, uh, one final thing and moving quickly to austin's part. We are also going to upgrade or add more Elements to let me see if I can see it to the recipes I can't find the recipes right now. I think there is like a bug here. Something is weird Maybe it goes to the screen. We're gonna look at that. Yeah, so basically there's a section for recipes And we all we only have one or two recipes and we all are planning to add more recipes for you to basically go there and have like a guided, you know Explanation on how to do things with the ui library and the design system Okay, so I'm giving the stage to you austin for the final section Okay, thank you Thanks, man. Um, yeah, I will be quick because we are basically out of time but There's a there's a few things that would be good to go over still um One of those yeah, basically I'm going to talk a little bit about what's coming soon to the app platform for for web applications and then I will Expand on that a little bit into what's coming coming further down the line For extensibility in general. So you should see I think my app platform. What's next slide currently Is that right hang on? Yes, uh, we can see it Okay, okay So I'm you're gonna go through these very quickly But one one feature that's coming to the app platform soon is feature toggling We've been talking about this for a little while, but this is basically tooling to allow you to turn on and off different parts of your application When you're talking to the different versions of a dhs2 server. This allows you to basically Create one application that can talk to multiple dhs2 versions Not multiple versions of the application And then you can just turn on and off different parts of your react Component tree based on the version of the dhs2 server that you're talking to We also already do a little bit of the um, this same normalization that You heard about with the android sdk, uh, which allows you to talk to A dhs2 server without caring so much about which version you're talking to And we're going to be in improving that capability as well in the near future The second thing that's coming soon is plug plug in builds, uh, which we we heard a little bit about earlier There's an open pr on this for the app platform And basically this will allow a dhs2 application to also expose a plugin And initially that is targeted at dashboard plugins, but very soon after that will also support capture plugins. So this is Similar to a dashboard plugin. It's something that you can install as an application and then you can expose either as part of your data capture workflow or as Something a widget on on the tracker or tracked entity dashboard that is in the new upcoming capture application The tracker functionality in the capture application And that will all be basically similar to pwa that'll be enabled just with a single line of configuration in your in your application The improved data store api that we talked about in the api is is quite powerful and and very cool It allows you to do a lot of things in a custom application So we'll also be adding support for that to the wrapper library and and also promoting that to to fully supported And that is the app service data store library Um, I'm probably including that directly into the app runtime. Um, rather than keeping it as a separate, uh, library improved translation support including translation of application names and Bundling translations as well as making it possible to swap out translations. Once you've already installed an application We'll also be be looking into that in the near future And improving the way that you can include and expose translations to your users Finally and this is one that's been on the table for quite a long time It's something that used to exist just for the maintenance app. It was kind of a hard coded thing in the in the back end Um, but it was a very useful feature That when we got rid of all of that hard coded stuff, uh, we ended up losing that feature But we haven't forgotten about it. Uh, the whole the intention all along was to make it a more generically available. Um, functionality for all applications both bundled as well as installed applications Um, and this basically lets an app expose a quick link to somewhere within that application It'll be exposed in the manifest file and then that quick link will be available Um when you're typing in the search for your shortcuts, um in the app menu and There's a proposal also to maybe include action shortcuts, which would allow you to actually Trigger an action such as generating analytics tables directly from the apps menu. Um, that's going to Something we're going to think about for for later. That's not going to be included in the first version We're just going to have quick links and improved keyboard shortcuts in in the app menu And then I finally wanted to talk just very very quickly since we're at the end of the time here About the extensibility vision. So we've heard a little bit about the android stk We've heard a little bit about the rest api and a little bit about the web app platform Um, but these are all sort of pieces of a bigger puzzle And and that's the the vision for dhs2 as a platform as something that is extensible and customizable for different use cases And there are a lot of different components to what What makes a dhs2 a good platform? Build being able to build a consistent android application or a consistent web application Are two parts of that and being able to share those and install them to various dhs2 instances But there's a lot of other pieces of that as well such as integration with external services which Herman mentioned and is something that a lot of people are working on right now Is to make it easier and More consistent to build integrations with third party services as well as to Combine those integrations with custom applications both android and web and plugins on the dashboard plugins in the capture application all of those types of things Similarly being able to run some logic server side and having an application that is installed and has both server side and Front end browser based logic is something that's coming down the roadmap as well There's a lot of other things in here as well We talked about data store improvements that make it a lot more powerful But there are some challenges with using a free forum data store like that So thinking about how to enforce schemas on different namespaces within that data store How to support migrations as well as custom installation upgrade and configuration logic for specific applications And linking to metadata packages and custom metadata packages that might be included with an application or matched with an application Are also part of part of the roadmap there for the the larger Sensibility vision That's a very quick teaser. I'll have some pretty pictures to share at another time To show kind of what this might look like And when when you might be seeing some of these pieces come into come into into being over the next months to a couple years And yeah, but I'm excited to Work with all of you to learn about how you're using dhs2 and where your pain points are for extensibility as well So please feel free to reach out to hermon myself or anyone on the team If you have feedback or suggestions or pain points that you run into Because we won't know unless you tell us so please please let us know when you have feedback or suggestions And that is it for me. We are over time. I apologize, but hopefully that was a helpful introduction and overview of extensibility and application platform It was very exciting Austin. Thank you. Thank you for that and we are basically done I mean if you have to go just go but I want to address a few questions in the chat Okay for out of respect for the people putting the questions there So let's address them and then we are done. Okay, so we have a question by gift saying are there also plans to support Hiding the header bar for standalone apps bootstrapped from app platform There we have had some proposals around that and I will Yeah, I think it'd be good to talk that through so standalone applications haven't been The main focus of the app platform the app platform has been designed for building apps that run inside of dhs2 It does also support some standalone applications, but it has not Been prioritized as as one of the main use cases. So that is something that we've talked about is having a headerless version of the app platform for standalone apps There are definitely some design considerations we need to make to make sure that it's still recognizable as a dhs2 application even if it's speaking outside of the Or it's talking to dhs2 from out from a different server But again, I would would be interested in gift as well as anyone else that has Use cases for standalone applications built with the app platform or talking to dhs2 server And that are not running within dhs2 Please reach out and and we'll talk about that and so gift. I'll I'll reach out to you But anybody else feel free to reach out to me as well If you have thoughts or use cases even if they're path formed about how you might use that functionality Okay Excellent now second question out of three. Okay, uh from isack our all app components up to date with underlying technology Also, are these components only specific to react? Um Underlying technology Yeah, did did you want to take on her? No, I'm not sure the context for the for the question right because it feels very generic the first part but also uh Like whether these components are only specific to react. Maybe you can tackle that part Yeah, sure. So we have a react component library that is specific to react So it is not something that you can use easily within something like angular review or those types of other frameworks um It is technically possible to do that, but it's not something that we've prioritized If you're using a different technology like angular, please let us know so that we can be aware of that um The react um Yeah, those so those that component library is react specific The design system, however, and the the definition of what those components are and what they should look like That's all agnostic. So that doesn't care what framework you're using or what technology you're using And and that's just a design guidelines for how to how to design standardized and consistent dhs2 applications And that's something that you can use to implement your own components within angular or view or Any other framework that you might want. Okay, maybe the question whether we are up today with underlying technology means that To to what degree we are using the latest react You know, yeah We are on react 18. I believe or we support react 18 So it's uh, it's up to the application to to provide the version of react But we support the latest versions um on uh with the component platform as well as the app platform Okay, and last one and we are done. I'm sorry for the for the delay. How flexible is this? Speaking of the extensibility the extensibility part. Okay, how flexible is this extensibility? Say I want to subset of these latest features to bootstrap my custom app. Can I do that? Um, I'm not sure which features they're talking about there. Um These these are things that are coming soon. So most of these are not currently existing As they come out. Yes, you will be able to pick and choose the ones that make sense for your extensive or extension or your your use of these extensibility tools In terms of the yeah, all of the functionality that we've talked about for the app platform the android sdk Um, those are all provided. Yeah, basically in a way that you can you can pick and choose the things that work for you The app platform is a standardized kind of packaging for an application. So In that sense, it is Uh, a bit rigid in in what that application should look like But that's kind of the point is to make it consistent and easy to use for dhf2 users as well And easier for for you as developers to to build those applications Um, but in general when we provide tools we provide them in a way that it that should be be able to pick and choose What what makes sense for your Uh extension or your application and particularly when we talk about the different components of An extension such as a web app an android app a dashboard plugin a tracker plugin an integration with a third party service a server side Logic function of some kind. Um, all of those Most most applications or most extensions probably won't need all of them But we'll need two or three or four of of those pieces and it's definitely Or maybe even one and it's definitely Possible and will always be possible to To create an app that is just an app and doesn't have a server side component or or advice versa Um, hopefully that answers the question. I'm not sure if I if I got that completely right Yeah, I think I think you covered it Okay, so let me finish by sharing my screen with the next events. Uh, in case you want to join um, I'm going to uh show Uh the upcoming events So there's an edit dhs 2 for education academy. We have the next monthly developer meetup May the fifth and then we have the developer academy We run out of time today because we have so many things So many exciting things to share with you that that I hope will have much more time during the developer academy because that's a four day workshop And you can sign up right now and we will be covering both android and web So if you follow that link there, you can register. Okay, and then we'll have the digital annual conference So those these are the next events you can contact us At a community at the hs2.org or events at the hs2.org if you have questions about the events, okay So just wanted to say thank you and thank you to our speakers to austin to victor for For such great presentations. I thank you all for for participating. That's a wrap up for the event Take care and thanks. Feel free to reach out. Thank you very much. Thank you. Thank you everyone for joining Thank you