ZOO-Project: News about the Open WPS Platform
This is a modal window.
Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.
Formale Metadaten
Titel |
| |
Serientitel | ||
Anzahl der Teile | 295 | |
Autor | ||
Mitwirkende | ||
Lizenz | CC-Namensnennung 3.0 Deutschland: Sie dürfen das Werk bzw. den Inhalt zu jedem legalen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen. | |
Identifikatoren | 10.5446/43474 (DOI) | |
Herausgeber | ||
Erscheinungsjahr | ||
Sprache |
Inhaltliche Metadaten
Fachgebiet | ||
Genre | ||
Abstract |
| |
Schlagwörter |
00:00
SystemaufrufProjektive EbeneBus <Informatik>GrundraumParametersystemVorlesung/Konferenz
00:24
Minkowski-MetrikGenerizitätStandardabweichungWeb ServicesOpen SourceSystemplattformFramework <Informatik>SoftwareentwicklerVerkettung <Informatik>Prozess <Informatik>ImplementierungImplementierungSoftwareProtokoll <Datenverarbeitungssystem>Projektive EbeneStandardabweichungNeunzehnComputeranimation
00:52
StandardabweichungWeb ServicesGenerizitätSystemplattformOpen SourceVerkettung <Informatik>Framework <Informatik>Prozess <Informatik>ImplementierungSoftwareentwicklerEntscheidungstheoriePartikelsystemBitProjektive EbeneTopologieKappa-KoeffizientSoftwareKontextbezogenes SystemMAPVertauschungsrelationProgrammbibliothekDienst <Informatik>Metropolitan area networkGraphfärbungComputeranimation
01:59
SoftwareentwicklerProjektive EbeneMailing-ListeSoftwareentwicklerComputeranimation
02:18
Rechter WinkelProjektive EbeneZeitzoneOpen SourceComputeranimation
02:38
EindringerkennungStörungstheorieSelbst organisierendes SystemImplementierungMailing-ListeComputeranimation
03:02
Selbst organisierendes SystemGeoinformatikGatewayOpen SourceGrundraumVertauschungsrelationBitRechenschieberMailing-ListeComputeranimation
03:26
Translation <Mathematik>Dienst <Informatik>ObjektverfolgungMailing-ListeDienst <Informatik>Service providerOpen SourceFormale SpracheMessage-PassingRückkopplungt-TestProgrammfehlerE-MailGrundraumOnlinecommunitySoundverarbeitungKernel <Informatik>Weg <Topologie>Projektive EbeneIntelProzess <Informatik>VererbungshierarchieInternetworkingSondierungZusammenhängender GraphRechenwerkComputeranimation
05:23
Offene MengeSystemplattformWeb ServicesCodeDienst <Informatik>Kernel <Informatik>AppletSkriptspracheGRASS <Programm>Zusammenhängender GraphEinfache GenauigkeitGeradeServerDienst <Informatik>NetzbetriebssystemClientProgrammierungCodeBrowserKernel <Informatik>SpezialrechnerNichtlinearer OperatorMultiplikationsoperatorProjektive EbeneKartesische KoordinatenProgrammierspracheExogene VariableBeobachtungsstudieART-NetzFormale SpracheComputeranimation
06:53
CodeDienst <Informatik>KonfigurationsraumBitDienst <Informatik>InformationCodeGRASS <Programm>ProgrammierspracheKartesische KoordinatenMetadatenMAPElektronische PublikationPlastikkarteArithmetisches MittelProgrammierungZellularer AutomatVollständiger VerbandWeb ServicesOrdnung <Mathematik>Gebäude <Mathematik>Computeranimation
07:55
Web ServicesWeb ServicesMapping <Computergraphik>Profil <Aerodynamik>Zellularer AutomatFunktion <Mathematik>Kartesische KoordinatenGeradeEin-AusgabeTypentheorieMAPServerResultanteKernel <Informatik>Computeranimation
08:39
Web ServicesServerProfil <Aerodynamik>Ein-AusgabeMultiplikationsoperatorComputeranimationVorlesung/Konferenz
09:17
Dienst <Informatik>Kontextbezogenes SystemVideokonferenzKartesische KoordinatenWeb ServicesClientComputeranimation
09:35
Ein-AusgabeStichprobeMaß <Mathematik>Cookie <Internet>ComputersicherheitParametersystemKernel <Informatik>GarbentheorieWeb ServicesWurm <Informatik>E-MailSchedulingProxy ServerAttributierte GrammatikAuthentifikationKartesische KoordinatenFunktion <Mathematik>WarteschlangeImplementierungDatenfeldComputersicherheitSkriptspracheKernel <Informatik>BenutzerbeteiligungEin-AusgabeAutorisierungQuaderART-NetzInterpretiererInverser LimesDynamisches RAMGarbentheorieMultiplikationsoperatorWeb ServicesServerComputeranimationFlussdiagramm
10:36
Kernel <Informatik>SupercomputerRechter WinkelE-MailSLAM-VerfahrenProzess <Informatik>TaskWarteschlangeDämon <Informatik>Kernel <Informatik>Projektive EbeneResultanteFehlermeldungDemoszene <Programmierung>CASE <Informatik>ComputeranimationFlussdiagrammVorlesung/Konferenz
11:22
Explosion <Stochastik>CodeKernel <Informatik>PunktDienst <Informatik>GeradeImplementierungSichtenkonzeptProzess <Informatik>Computeranimation
11:43
Kernel <Informatik>Explosion <Stochastik>CodeBenutzeroberflächeCodeBildgebendes VerfahrenGeradeRechenschieberDienst <Informatik>VerkehrsinformationComputeranimation
12:10
Kernel <Informatik>Explosion <Stochastik>CodeIkosaederSchnelltasteVerkehrsinformationSchnelltasteImplementierungExpertensystemUmwandlungsenthalpieSoftwaretestGruppenoperationBenutzeroberflächeVorlesung/KonferenzComputeranimation
12:50
Kernel <Informatik>SchnelltasteExplosion <Stochastik>CodeClientEin-AusgabeKonfigurationsraumProjektive EbeneCASE <Informatik>Metropolitan area networkVorlesung/KonferenzComputeranimation
13:19
CodeWeb ServicesQuellcodeOpen SourceDienst <Informatik>DatenbankVersionsverwaltungWeb ServicesCodeVersionsverwaltungDienst <Informatik>ParametersystemProjektive EbeneRelationale DatenbankDateiformatKonfigurationsraumMetadatenElektronische PublikationInformationProgrammierumgebungFunktion <Mathematik>SchlüsselverwaltungGrundsätze ordnungsmäßiger DatenverarbeitungComputeranimation
14:10
CodeWeb ServicesInformationSchlüsselverwaltungFunktion <Mathematik>ComputeranimationVorlesung/Konferenz
14:33
Dienst <Informatik>Projektive EbeneDienst <Informatik>AppletProgrammbibliothekVersionsverwaltungCodeGRASS <Programm>SoftwaretestElementargeometrieTriangulierungNichtlinearer OperatorGoogolVektorraumQuellcodeSummengleichungSkriptspracheKonfiguration <Informatik>Spider <Programm>Web logComputeranimation
15:49
Prozess <Informatik>Web ServicesSystemaufrufKette <Mathematik>SoftwareentwicklerKlasse <Mathematik>Kanal <Bildverarbeitung>ServerProgrammbibliothekDienst <Informatik>Data Encryption StandardDienst <Informatik>Kernel <Informatik>QuellcodeProzess <Informatik>Ein-AusgabeVersionsverwaltungCodeFunktionalKartesische KoordinatenKette <Mathematik>ProgrammierungMathematikerinWeb ServicesMathematikDigitale PhotographieInstantiierungMultiplikationsoperatorRichtungComputeranimation
16:46
ClientTemplateAiry-FunktionExogene VariableFunktion <Mathematik>ServerSyntaktische AnalyseMultiplikationsoperatorBrowserProzess <Informatik>ClientServerSchreiben <Datenverarbeitung>Vollständiger VerbandMessage-PassingComputeranimation
17:11
ClientDesintegration <Mathematik>Demo <Programm>Syntaktische AnalyseTemplateResultanteFlächeninhaltMathematische LogikProjektive EbeneEin-AusgabeBildschirmmaskeKartesische KoordinatenForcingMini-DiscProzess <Informatik>Computeranimation
18:03
Demo <Programm>F-TestClientInstantiierungServerResultanteBildgebendes VerfahrenMAPComputerspielMapping <Computergraphik>Generator <Informatik>Kartesische KoordinatenIntegralClientSkriptspracheDämpfungMultiplikationsoperatorArithmetisches MittelVersionsverwaltungAppletZweiOnline-KatalogBitmap-GraphikKlasse <Mathematik>SondierungComputeranimation
19:11
Ext-FunktorOnline-KatalogTriangulierungWeb ServicesDienst <Informatik>Divergente ReiheFamilie <Mathematik>Computeranimation
19:35
BildschirmfensterBinärdatenGatewayGeoinformatikProjektive EbeneSoftwaretestMAPMereologieGerichteter GraphOffice-PaketInterface <Schaltung>SoftwareBildschirmfensterTelekommunikationBenutzeroberflächeRauschenHilfesystemNeuroinformatikVersionsverwaltungPhysikalisches SystemSampler <Musikinstrument>Mapping <Computergraphik>ServerDienst <Informatik>Computeranimation
20:54
SchnittmengeInterrupt <Informatik>Zusammenhängender GraphWeb ServicesTaskVollständiger VerbandART-NetzInformationMessage-PassingInstantiierungMAPInhalt <Mathematik>BildschirmmaskeBrowserSpider <Programm>MultiplikationsoperatorEvoluteErwartungswertNeuroinformatikFlächeninhaltProzess <Informatik>Gesetz <Physik>Mailing-ListeE-MailEinfache GenauigkeitRotationsflächeWarteschlangeDienst <Informatik>StapeldateiClientRPCSpielkonsoleServerSoftwareComputeranimationVorlesung/Konferenz
Transkript: Englisch(automatisch erzeugt)
00:07
I am Gérald Fenoa from Geolabs company, and I am co-author only of this talk. I have as a co-author Nicolas Bozon, Venkatesh Raghavan for Osaka City University,
00:20
Remi Cresson, which is present in the room actually, Benoit Iru, which passed away earlier this year, unfortunately, and Jean-Christophe Léconet, which were both working on the HPC support in the zoo projects that I will introduce to you. So the idea of the zoo project, the zoo project is first of all a C and C++ implementation software of the WPS standard published by the OGC.
00:50
It is available on the internet, and the initial idea was to create some kind of protocol boost in between all the OSGO libraries,
01:02
all the OSGO software that are already available and providing a lot of services already, and simply find a way to use every tool in a single manner. This is where the WPS came into picture. So the idea was born in 2008 during the first 4G in South Africa.
01:24
This is why we have this kind of color and the baobab tree which is coming from the Senegal. Then we have the full history of the zoo project with the first talk in Sydney, and then we tried to make a release for every single first 4G all over the year. As you can see, during the last 4 years we slowed down a bit,
01:46
because when you reach a given level of quality in your software, you don't need much more effort and much more release because it is simply working. So I will quickly introduce to you who is taking the decision within the project.
02:04
So it is the project steering committee. Then I will introduce to you the committer of the project, let's say the list of the developers that are providing support, code, and everything for the zoo project. Then also you can notice that we love to give a new name for everything.
02:22
We give a new name for everything. So the project steering committee, the tribal council, and so on and so forth. Here on the left you can see a few people with a zooty shirt like my amazing children, and Franco-Merdame also on the right. Here is a list of the tribal council, with Nicolas Bonzo again,
02:42
Maria Brovelis that everybody knows, Massimiliano Canata, myself, Hiro Fumi Hayashi, Daniel Kestel, Jeff Makina, Marcus Netler, Venkatesh Raghavan, and Angelos Tsosos, which is one of the PCSW implementers. Here you have a picture of faces of the PSC. Only Hayashi and Daniel Kestel are missing.
03:02
It was in a phosphorgy Europe, I cannot remember where. Then you have here the list of the committers, so Nicolas Bonzo, Trevor Clack, Remi Cresson, Luca Delucchi, myself, and one of the most valuable contributors, which is Nuitland Mark, Jeff Makina too.
03:23
I will speak about him a bit more in the next slide. We have links with plenty of universities that we name. We are commonly naming them our knowledge partners.
03:41
Our knowledge partners are responsible to create curriculum for their students, and the student will learn the project and will implement their own services. So it helps also the project to get feedback from the user community and to make workshops also locally in every of these universities. So we have the Graduate School of Academic Science in China,
04:04
SUPSI, which is where Massimiliano Canada is working. Here we have the Naresuan University, where we have led a workshop on mappint and mappint for me. Laboratory of Geometrica, Osaka City University and Foundation in Munmak from Italy.
04:25
Unfortunately, you may notice that I come from France, but no, your French university was supporting the ZOO project by now. Obviously, as it is an open source project, you can contribute yourself, so you can join the mailing list, have direct contact with us on IRC, do bug tracking.
04:41
You can also make a language support internally inside the ZOO kernel, or for the ZOO services also. You can provide new WPS services. You can also contribute doc, because we are not very good in publicity, let's say. And also in documentation.
05:02
You can also directly provide simply tradition using the trans effects. It means that you don't need to ask anybody to contribute. You simply have to connect to trans effects, and you will be able to translate the internal messages of the ZOO kernel, or the internal messages from the ZOO services. I already spoke about kernel and services, but you are not aware of what it is about.
05:28
Here are the four main components of the ZOO project. First, we have the ZOO kernel, which has been implemented in C. Why we have implemented it in C? Because we did not want to be stuck in any programming languages,
05:41
and we want to be able to handle any kind of programming languages, which is actually what we are doing now. Then you have some ZOO services, which means that you have chosen a programming language, and you have implemented your services. I will show you a few lines of code, and I can show you also how with two lines of code you can define new services.
06:02
So even my children can make new services, WPS services available. Then you have this WPS API, which was initially only available in the JavaScript world, and I will go in deeper details later on. And then you have the WPS client, which is not a JavaScript API that is running on the server side,
06:20
but it is this time running on the client side, and it will ease the interaction in between your web browser and the WPS server. So the ZOO kernel is a C application, as I told you. It is running as a CGI.
06:40
It is supporting WPS1, WPS2, 100%. It runs obviously on every operating system, because it has been written on C, so it is most easy to port on every single operating system. You can implement your services, because it is supporting to handle execution of C, C++,
07:05
Fortran code, Java, PHP, Perl, Ruby, Python, C Sharp, JavaScript, and R. What was unfortunate at that stage when we were only supporting programming languages was that people have to still write some code
07:20
to make their WPS services available. So we were thinking to ourselves, maybe we have also plenty of applications that may have been implemented properly, like GRASS GIS or Fotulbox and SAGET GIS. When I say implemented properly, I mean they have internally some kind of catalog, so you can extract all the metadata information from this catalog,
07:43
and you can publish actually with our own tool, simply the ZOO configuration file, but I will explain to you a bit in deeper details what are the ZOO configuration files later on. So here are some examples of 10 years old applications we have made because the ZOO kernel is available for every service
08:03
which is returning GIS data, which can be a raster, a result, or a vector result. It can be published automatically using the Map Server C API. Your data using WMS, WFS, or WCS, depending on the type of your output.
08:21
So here you have an example where we simply run a PG routing request. Here you have the WMS which is used to show not the shortest line, the shortest path, but the safest path. And here, Don, you have the elevation profile, and on the right side you have the WFS request for the same WMS feature.
08:44
So it means that you execute once your service, you can display it on a map, you can display the details, and you can reuse this WFS as an input to provide the elevation profile. Also, you may be aware that in WPS you can run your request,
09:02
your execute request, synchronously or asynchronously. In WPS2 they have added the GIT status request. At that time in WPS1 there were no GIT status requests, so we simply implemented a GIT status service, which is able to do the exact same thing as a GIT status request, which means that you can have a loading bar.
09:22
This application is seven years old ago. You can have a loading bar which is meaning really something, and which makes the client application really aware of what is the step the service is running, that is running back, is doing right now. You have also in WPS2 the nested input and nested output.
09:41
In release 1.7.0 the support is far better than in the previous one. Also in the new release we have the security section, because sometimes your WFS or WCS is secured, and you can define what are the header with this attribute and this security block, what are the header you want to let pass,
10:01
such as authorization or to simply pass the authentication of the user. The last but not least implementation that has been made is the HPC support, which means that you have the zoo kernel, which is running on a web server, and you have your HPC server, which is hosting our field toolbox application.
10:22
And then the zoo kernel is simply, when it receives from a proxy actually an execute request, it will send the data. It will also publish in Elasticsearch, but let's say it simply uploads the data, creates some kind of script that will be added to the scheduler in the queue.
10:43
Then the SLURM will execute this task. When the task is over, we will receive an email. This email will be read by a simple daemon written in Python, read this email, and then inform the zoo kernel that the process succeeded or failed. And then the zoo kernel will fetch the error log in case of error,
11:03
or simply the result. And the rest of the process is exactly the same than for other things. It means that you can publish automatically your data through WMS, like we can see in this picture. So this is a GeoSuite project where Remy was involved in.
11:22
So lately I went in London, where I've heard about this processing API, which is based on OpenAPI. And from my point of view, it means that WPS is dead from what I have learned with this OpenAPI. Obviously, we have implemented it before going in London.
11:43
So we have the processing API or API processes or WPS3 or whatever is the name you want to give to him. So hopefully with our implementation, you won't have to modify one line of code in your services because we want to be at the abstract level
12:01
and don't want to bother the developer. So here actually when the slides are online, you can simply click on these images to see the user interfaces. I have also published a report on these OGC hackathons. And I would like to thank specifically Benjamin Pross.
12:21
And I think every WPS implementer should thank him for all the work he has made with this WPS test binding. Because when I met with him in London, I realized that nobody has given him any help, even an expert like we can be, for this work. And so he tried his best to implement everything
12:40
and to define everything in the specification. But still, there is some lack. So maybe we should help him. Anyway, it was just too present to use this also user interface, which is client of PYGO API made by Tom Kralidis and Angelo Sostos, I think also. And just, just, what is your, just, just, just, okay.
13:09
So in this case, we are simply a client of WFS3. And we are running WPS3 on top of this WFS3 feature. So then we go to the Zoo services.
13:22
So Zoo services in the Zoo project is a couple of the metadata configuration. So what are the input, what are the output, things like that. So you can use our own format using the Zoo configuration file or you can also use YML. And knowing 1.7.0 version metadata of the every single services can also be stored in a relational database.
13:45
And the idea is still to convert any existing code simply, the most simple possible as a WPS services. So here you have a very stupid example of the LOPY. So in LOPY, you can see that we are only giving three parameters.
14:04
The main configuration file, let's say the environment because also when the service is running, it is fetching all the environment information and it is passing this information to the service code. Then you have the input, the output, and the only thing you have to do is to put your, to add a value key inside your output
14:22
and put whatever you want in this and then return if the service succeeded or failed. So as Einstein said, keep it simple, stupid. With this Zoo project, when you install Zoo project and you have already SAGA GIS and Orfeo Toolbox,
14:41
Orfeo Toolbox, sorry, then you will have 500 more ready to use WPS services. Also we started initially by implementing every GitL command line tool that you are using like OGR to OGR, GitL translate, GitL wrap, and everything like this as WPS services. But we did that work 12 years ago
15:02
and the code is still working already with the last test version of GitL. The same we did with SIGAL mainly for triangulation. Then we got some support about GRASS GIS. For Orfeo Toolbox, the last version is supporting 6.6.1, version 6.6.1 of Orfeo Toolbox. 7.2, so the very last test SAGA GIS version.
15:23
And also some JSOC was made in 2016 and is available on GitHub just to prove that indeed you can implement the bass vector operation using the GitL and the underlying geos library. But you can also do the same with the geotools. So we just made this Google Summer of Code
15:42
to prove that you can do the same thing using C library or Java library. Then you have this Zoo API. This Zoo API is based on SpiderMonkey because the Zoo kernel is relying on SpiderMonkey to execute services that have been implemented in JavaScript. So you can run services in JavaScript
16:01
and from this JavaScript source code you can also invoke any kind of other existing services. So if you don't know anything about programming and you want to write all your code in JavaScript, you can do this. And then you can use our internal Zoo kernel function that has been exposed to the JavaScript world.
16:21
Use this function and invoke, for instance, one Orfeo Toolbox application, then one Python application, then one C application, then one Fortran application if you are a mathematician. And you can chain all this, but you don't chain only like you can do with WPS1 and embed the execute request as an input for another execute request.
16:40
Here you can also add logics in between every processing. So here are some examples of the MapMint1 version where we were using this JavaScript API. Here is another example of the georeferencer which was made available online ten years ago. Then we have the Zoo client. The Zoo client is a JavaScript API one more time,
17:01
but this time it is not working on the server side, it is working from your web browser. And it is the writing of execute request or get capability or describe process and also is the parsing of the result. It is based on a logic-less mustache template.
17:20
It has been made in 2015 and it is still working right now. So here you get an example of how it can be used, how it was used in Publica Mundi, an European project. Then here you have the famous SAGA demonstration that you will have on your OS GeoLive. Actually this demonstration, I like it a lot,
17:44
because even the form to input the data and everything has been generated on the fly depending on the result of the describe process. So if the Orfeo Toolbox application takes a new input, automatically the form will add this new input
18:02
and will let you fill a value for this new input. Also if you choose the image PNG, then it will use the map server automatic publication and the result will be obviously shown on the map. Here is another example which is using the exact same principle
18:20
to automate the generation of the form, which is available online and on your OS GeoLive and it is running the Orfeo Toolbox application. This is another example of what we used actually when the client born, it depends on require.js, so it means that every Java script will be loaded dynamically.
18:43
So we had to re-implement mappint almost from scratch and this is a mappint2 version where you can see the city of Dakar in Senegal. Here is one more time the georeferencer that I shown you in mappint1, which is also available obviously in mappint2. And this is another example,
19:01
or you can simply classify your raster data. Then this has been made also in 2015. This was a second integration of WPS, meaning that from within your catalog you were able to use WPS services as a first-class data in the catalog and obviously you are accessing your WPS services
19:24
from within the catalog, so the data is coming also from within the catalog and the data, once the service has been executed, will be stored directly inside the catalog. So here you have an example of the Seagal triangulation I was speaking about earlier. Also we have the project for Windows.
19:41
So we have an ongoing test of the compilation using this AppVeyor, so we thank AppVeyor for this work. Also we want specifically thanks Jeff Makina for his hard work with this MS4W, which means Map Server 4W, and it's this Map Server 4W.
20:01
Some people were asking him to integrate the C-sharp support of the Zoo project within the Windows version, and now it is available in the 1.7 dev package of the Zoo project, which is available in the brand new MS4W that was released earlier this week.
20:21
So on top of this Zoo project, which is already, I hope you understand, an amazing software, we have built up a GIS SDI, so some kind of user interface, because I think in 2019 it is also nice to have a user interface to interact with your WPS services and ease the work, ease the communication,
20:42
the use of any software using this. So we built up this mapping product, and I finish my presentation. So if you have any questions, thank you for your attention, and if you have any questions, I am open to answer any. Sorry.
21:03
Sorry for interruptions. Yeah, so thank you for being on time. Questions? You need a mic. I have some questions, some technical questions.
21:22
First, I saw that in HPC, you choose to inform the server that the task is ready by mail. Why? Sorry, maybe I missed my explanation. We are using SSH, right?
21:44
We connect through SSH to the HPC server, then we have provided, we have produced already, this batch is uploaded on the server, on the HPC side, then we connect through this HPC, again using SSH, and we add this as batch to the SLURM queue.
22:02
So we are using only SSH. Then, in HPC and in SLURM, you can say if the service failed or if the service succeeded, then you can send an email back when the task is over, not at the beginning of the task. Okay. Right, yeah, when the task is over.
22:21
Okay, so mail, it's okay, I guess, but perhaps a messaging service or something like that will be faster and you don't need to pull it or to do anything, it's just a subscribe? No, no, not pulling, no, we are not connecting again back to the HPC
22:40
because the HPC is responsible to run the task. And SLURM is reliable enough to make sure that we will get some information back that the task failed or succeeded. Okay, so basically you just said that okay, mail is enough, it's doing its job, okay. Honestly, we did not choose this, actually.
23:01
The client has chosen to use the email. And how come SpiderMonkey is not v3 or something else? Excuse me? Why SpiderMonkey is not v3 or something else for JavaScript? Well, because at that time when we implemented this JavaScript support, v8 was not existing, actually. And only SpiderMonkey was available
23:21
and also we were thinking that as Firefox is one XPECOM, one of the most famous XPECOM users, we were thinking at the beginning that we may also make ZooKernel running directly within your browser. And actually, back in 2012 or 2011,
23:42
we got ZooKernel working directly within your browser, which means that you can run from the console of your XPECOM component, you can run the services locally, or you can run the almost same, using the almost same syntax but changing the host name, the same service remotely. And we were thinking that maybe it can be a revolution
24:02
for every single software. For instance, let's imagine that in QGIS you have something like this nowadays available. So it may mean that if your QGIS is able, if your computer is able to process the big data you want to process, then you can run this service locally. But if your computer is not enough powerful
24:23
to run your service, then you may ask another server to run the exact same task. So I think it may be some kind of revolution. More questions? Thank you very much.