 I am here to present to you something about LibreOffice Online. I'm Jan Holczewski, I work for Collabora and it's awesome to have you all here. So, what is it LibreOffice Online? Maybe you have seen the announcement with the 5.3 that actually now we are like shipping LibreOffice Online. So, in the upstream version it's actually two things. One is that it's a source release so you can build your packages out of that. But also there's a Docker image that you can integrate into your web application and use it for your service that you probably are running or using or anything. So, this talk will be about how to do such an integration. So, first of all, LibreOffice Online looks like this. So, you can have some text here, some tables, some pictures, all the things that you would expect in the online suite. It is also possible for two people to actually connect together and work collaboratively in one document, which I think is something nice. Also, you can deploy it like behind your VPN. So, it is not necessary to have some outside service in some whatever other people's computers. You can have it all inside your business or school infrastructure or anything. So, how to do the integration? Sorry, I have two screens set up and does it show anything? No? Yeah. Okay. So, it is actually very easy to do the integration. So, you first install the LibreOffice Online and, well, do a bit of setup so that it works in your VM and you are able to see that you are connecting to that. Then, in your application that provides the data, you implement some relatively trivial REST API so that LibreOffice Online can actually download or upload the files. Then, you modify your web application so that you put the iframe that contains what the user actually sees into the look and feel of your application and then you profit. So, probably it was too fast for a talk. So, let's see what is actually the VOPI protocol. VOPI protocol is a specification that says how is it possible for an application to like talk to your data, get them or upload them. Actually, one of the implementations or the first implementation of this was Office 365 and we are using very similar protocol as then. So, I think to some extent like if there's somebody who actually uses Office 365 in their application, we are more or less dropping a replacement for that. So, LibreOffice Online is a VOPI client so it is something that can like create and try this data and be integrated. The documentation for this VOPI is quite extensive so like whatever you do not hear in my talk, you can see it in the documentation and in the specification. Here is a picture how it actually looks like. So, here is what the user sees. So, there's some kind of your web application. So, you know, some buttons and maybe sidebar or anything and then there's a place for the LibreOffice Online. So, you will implement it as an iframe and this iframe will communicate with the server part of LibreOffice Online which in the VOPI terms is called VOPI Client which provides the actual editing. So, it will provide the data for the iframe so that it looks like the document. You can see the selections there and all these things. On the other hand, for your web application you have to implement some part on the server as well which in the VOPI terms is called VOPI Host which provides the data. So, this is where you will have the endpoints and the authentication part and everything that actually deals with the data. And VOPI Client will be talking to this VOPI Host like independent from the web application and will download or upload the data as like you are saving or if there's how to save, how is auto-saving. There's a reference implementation which you can see on GitHub which like for the VOPI Host that part is implemented in PHP and JavaScript is used for the other parts like for the iframe itself. The rest endpoints are quite trivial. So, when you have a document that you need to download you will just, well, the URL needs to look like this. So, the VOPI Host URL so that's the server part you need to talk to. Then there can be anything random in between more slashes or anything but then like it has to be a VOPI and then again it can continue like with anything. You can just define that but then after that it has to be defined as files then ID of the file and content and access token. Access token is something that makes sure that the user actually has rights to access the data. So, it is something that is issued by your web application that controls the access. So, the like LibreOffice Online never asks for a password because like it is not its responsibility, it really just uploads and downloads data and it is the responsibility of your application that actually integrates like LibreOffice Online is inside that will like on one hand tell the VOPI client like this is the access token and then the VOPI client will talk to VOPI Host and like in that case we know that everything is authenticated and everything is fine and like the user has the rights to actually access the document. Uploading back is very similar to that like again some path contents, access token again important part of that. Check file info is one additional thing that you actually have to provide because like we are talking about the files as IDs. There's no way how to know for example the name of the actual file. So, like it will be very like transparent here. So, the check file info like when you ask for that again the file ID you will get the information how the file is big like what's its size and bytes, what is the name of the file, if it is read only some additional information you can work with in your application and online has to work with that information as well because like for example the UI has to look a bit different when the document is read only. The security token, so I've introduced that just a bit already. So, it is there just to like leave the authentication itself on somebody else and that is on your part of the application. So, the security token like from the implementation point of view can be just like very random thing. It can be like characters and numbers. From our point of view it is like not necessary to have any like strict form or be this big or this short anything. So, it just works. And well of course obviously the important part is that it has to be generated according to the user so that like two users do not have the same access token and also like you can provide some time to live for this token so you can make sure that you know after half an hour like the developer host has to provide just new access token so that the communication just continues. Discovery service is like the third thing that well one more thing that is here and that actually provides information about like where exactly the developer host is located. So, it says it serves some kind of XML that says OK, developer host has this URL and sits on this board so that it is possible for developer client to actually like know where it is and see what is going on in there. On the JavaScript side of things it is necessary to create the iframe that contains the LibreOffice Online. Here is where you will actually provide the access token to LibreOffice Online via a post method so that it can remember that and then it can talk to the developer host itself. So, we are nearly finished so how to actually implement it when you get to that because I fear that I've used lots of terms here that maybe were like not easy to consume in a short time so basically when you are implementing this you should do it in small steps first as well. So, first of all, you do not want to connect to some storage. You just want to like return some random, well not the random, you just want to return some message, hello world or anything by your VOPI host without connecting to authentication, without connecting to your real data. So, you will skip the hard parts first and you just make sure that like when you open your web application with the iframe that contains the LibreOffice Online will see, the LibreOffice Online actually comes up and you will see the message hello world there. So, these are the first three steps. So, that's the end point, they just answer hello world, then very small check file info that just says, hello world.txt is the file name and it has 11 bytes as the length of the message and that's done and then you will implement just very small iframe that posts the query for this file. And then when you have it, you can actually extend it and build on that. So, instead of returning just random hello world, you will actually use some real data, some real ODS file or DT and then also you will of course build in the like sending and receiving the access token so that you really are able to do it safely and make sure that only the user who has the access rights gets the document. So, that's it. Any questions? Flabbergasted. Sorry? Flabbergasted. Okay. So, yes. Why do you need two machines? Two machines. You said that the clover online should be in a separate machine for your own cloud. Well, it doesn't have to be. It is just recommended because the deliverer for online can like to take quite a lot of resources because it does the rendering of the tiles and these things. So, it is better that you have it on separate VM or anything so that like in case something goes wrong, it should disrupt the service of providing the files of other means. So, it's recommended but it doesn't have to be on separate machine because it sits on different ports than normal like HTTP. So, it's possible to be on one machine. It's just like convenient to have it on different ones. It's recommended to write on a separate domain because you can run Java speeds from loaded office documents in the file sharing context. Yes. Okay. If it's on different machine, is there any specification about the speed of the network that you have a good low latency about the tile rendering? Not really because for these two machines, they just exchange files between themselves. So, it is usual that for them it is local network. So, it is fast. But even if it is not fast, it will be that the download and upload of the files is slower but it doesn't affect the editing speed or anything. The editing itself like depends on the speed of the machine that it renders the tiles like quickly enough and of course on the speed of the connection between you as the client or somebody who actually as the user and the machine that serves the LibreOffice Online. Yes, Kor. Okay. Okay. Are you aware of any open source, Ruby server implementation besides this specific plugin for oncloud? Is there anything out there already in the open source or some Ruby server implementation? Yes. So, oncloud, nextcloud, have them. Pidio, then Colab. C file. So, at least file for them. Really something small dedicated just giving this Ruby interface to local server because oncloud, they are really big, serious institutions. So, nothing really just implementing Ruby interface. Well, not really because it is just the rest endpoints that have to be specific to the solution that actually serves the files. So, like, I actually do not see how it could be done specific. Like, we could do it as like having some example code like how it should look like in PHP, how it should look like in Python, in what not. But I... We don't have a customer that wants that yet. Yeah. Yeah, well, yeah, it could be from, yeah, from some software system, but... I just wanted to try it out and I was spoiling at this point because I just wanted to test the editor and then I found myself installing oncloud and all these big things and I just wanted to throw in the document and test the editor. Yes, so if you... Yeah, if you want to... Yeah, if it is just for testing, you can enable editing your local files on the machine where it runs. Like, of course, like for some public use, it is unsafe because you would be able to see the content of the ETC password or whatever. But like for testing, you just enable it in the ETC.owwst.slashowwst.xml. And, like, there's a setting, enable file access false, you change it to true. And you can immediately, like, put any file name there and for testing, I think it's enough. Yes, it's described in the main read of the online source code, so if you issue the make-round command... Mm-hmm. So is the next one presenting now? Okay, thank you so much. Thank you.