 Dobro, da se načeš. To je inovalo. Inovalo, da je to zelo zelo, da je to zelo zelo. Zelo sem početil je od različenih. Zelo sem početil, da je inovalo inovalo inovalo inovalo inovalo inovalo inovalo inovalo. Zelo sem Andra Stimaren. Zelo sem početil, da je inovalo inovalo. Če ma to doarnavali, da so dogeto docega v ročne formace. Librej ofici bude poslednje dovoljom do 100, docega v ročne formace, opravljaj nekakaj docega doformati, da je to za svoj početil v inovalo. V Ofici početi, kaj podjevam, Multiple kolums, arme, našli, kolumni, v težnih dokuvenih. Vse ga lahko potrebujem in še inočne dokuveni dokuvenih dokuvenih dokuvenih dokuvenih dokuvenih dokuvenih dokuvenih dokuvenih dokuvenih. Vse ga lahko natosej, kako se ne znači, in kot bomo bojte, da dokuveni začali si pozve in priča, Torej je zelo izgleda izgledaj, kaj je zelo izgledaj o kondičnjelj formatičnih, filtrnih, kaj je zelo izgledaj, kaj je zelo izgledaj v online, zelo na desktopu. Zelo je zelo zelo zelo, da online je zelo izgledaj, neselite zrpnev, način ne isplave, način ne smelite sajima, korientačne navetje. Z vžličenjem je modačila, da lahk jeame angstira do vrljeva. V vrljeva se podjelite, o kater jaz burat, značirajte, vsak zjelite videa, know that you might to wanna implement collaborative editing of documents. Therefore, it's very important to make its integration easy and it's really a key to success. Because without integration you can probably open a document, if from your local hard drive. But it's not a big deal, because you can do this with the desktop application anyway. in integracijstvo. Prvno je, da postavljamo kolaboran online in kolaboran online začetnjenje. Prvno je kodil, na kodilje. Vse možemo postavljeni SSL za htt vs. access. Vse je vse predstavljeni, protokol, da smo vse izgledali, tako, ampak vela, na sekuritej. Zdaj bi tega izglede in izglede se vse intergačne, vse in vse dokumentje, in in vse online. Zdaj bi modifujejte tega aplikacije in tudi tega intergačna. To je tudi, da bi ti se boščali. Or maybe you have additional requirements and some modifications are needed on the online part to be able to meet those requirements. In the next few slides we will go through a few of the existing integrations in alphabetical order and I will present those additional developments that somewhere were necessary to meet those specific requirements. Ok, so the first is here is Alfresco. So Alfresco is a document management system. Alfresco connector was made available by ARAVA. So here is the link to the github. It was fully implemented in Java and actually they had a specific requirement. They had multiple nodes that run collaboration online and they needed a central monitoring system. So we implemented those monitoring system to them that in the configuration file you can set a log server and it collects the status messages from the individual nodes and the server then can aggregate this information into a central place. The next integration is Igrupfer. So this was also developed by Igrupfer themselves. They implemented it in PHP and JavaScript and they also had a special integration need. Namely they needed to print files from Firefox. So talking about printing APIs in the browser. It basically boils down to the point that PDF is generated and the PDF is downloaded and that PDF is printed from the user's browser. However, unlike in Google Chrome, where there is a nice preview, in Firefox it was simply a file download, which was confusing for the users because they didn't know what to do with the downloaded file. So it was a bad user experience. We improved this for Igrupfer, we had to extend and finally they were happy and it worked for their users nicely. The other thing that they contributed is some tweaks to the Docker file so they actually sent a patch to us and it was merged and integrated so they could use the Docker version more efficiently. The next integration is Colab. Colab developed this integration themselves and they had a special need. They had to control the iframe from outside. So in their web application they have a concept called MasterView and MasterView can control the other views so can close the documents for the other views. And therefore they need to control the iframe from outside from the web hosting web application. So therefore we had to implement post message API that can control the iframe from the outside like closing the document or downloading or printing. We also have Matermost integration, which was written by Florin Czarnay, Colabora. Matermost is the next generation of IRC or I don't know how to call that. So it's a chat program and it has a very rich UI. You can attach files to the chat and with this Matermost plugin you can open the files embedded in the chat. You can even edit it. And then Colabora.tv edit it with the other members in the channel. And changes are saved back to the attachment. So it actually changes the attachment in the chat history. So Moodle is an e-learning software. And with the Moodle plugin it's possible to add a live document editor into a Moodle e-learning course. So students and teachers can have an in-class collaboration on documents. Next cloud. So next cloud connector was originally developed by Colabora, but now next cloud engineers are actively developing it and adding features. So it's implemented in PHP and JavaScript. And it's one of the oldest integrations, so we have just implemented a lot of things to meet their requirements. So one of them was that we have the list of active users in Colabora online. And they wanted to have the next cloud avatars next to the user names. So we implemented this as a part of the check file info API. And we also implemented creating documents from templates. And we also introduced this hosting capabilities file that the particular integration can check which features are supported by a specific Colabora online version. Because now we have many Colabora online different versions in the wild and also different integration versions. So they need to negotiate about the feature set they know. So on cloud is also a very old and one of the first integrations which was initially implemented by Colabora, but now the on cloud engineers are also contributing features to it. So one of the biggest features that we developed for the on cloud integration was the watermarks. So it's not the document watermark that was presented an hour ago, but it's a watermark painted on the document tiles. So the document in the browser builds up from 256 by 256 PNG tiles. And we can add watermark to each of them. And the on cloud's requirement was that we shouldn't add the same watermark to all tiles, but it should be different per view. So for example, we can include the user name into this watermark and different users can get different watermarks. So for example, when a confidential document is collaboratively edited or viewed by many participants and one participant makes a screenshot, we will know by the watermark who was that. So basically that's one of the use cases of these per view watermarks. The PIDEO integration was developed by PIDEO itself. PIDEO is also a document file sharing application similar to next cloud and on cloud. They had a special requirement about the access token that is used to authorize the opening of the documents. So originally we had a limited character set that could be used for the access token in order to avoid these HTTP escapes and reescapes and double escapes and so on. But they had to use some special characters, so we just created this improvement for them. And the last example is the roof connector, which was implemented by soft distribution. And for the integration we had to improve the save as and the full screen handling of presentations because they reported that due to some browser security settings it didn't work as expected. So what do you need to do if you want to create your own integration? I will just quickly go through the steps. I cannot go into the details. Unfortunately the time doesn't permit, but I would like to give you a quick overview about the architecture of this online and web app setup. So in this first screen this is the easiest architecture of the collaborative online and web application setup. In this... OK, maybe I can't use this, so this is basically what we have in the browser. We have this blue box, the web application, and within that an iframe, the online editor. So this iframe communicates through the VOPI protocol with the VOPI-like client, which provides the document rendering and editing functions. Of course the web application communicates with the web application server. And the VOPI-like client communicates with the VOPI-like host, the web application server because it has to download the document, open it, edit it, and then it has to upload it again, which is a save operation. So these communication channels are bi-directional, naturally, which means when you set up, you need to make sure that your browser can see the VOPI-like client and vice versa, and also with the web application and also those two servers have to see each other all the time. So it poses some problems when you have firewalls, high availability setup, and so on. So this is a different presentation, so it's a topic on its own how to do this properly. But for a simple demo, it's of course not a problem. So we need to talk a few words about this VOPI protocol or VOPI-like protocol. So VOPI is an abbreviation of a web application open platform interface. So this protocol is used to exchange documents and data between web applications. So it's just suitable for this case. And it's an open standard. You can read the documentation and the collaborative online implemented parts of that standard. Also it extended some maybe incompatible or by their own ways, so we call it VOPI-like because it's not VOPI, but very similar. So in theory it follows this standard. So the next step when you implement your integration is to implement only three rest endpoints. So one is for downloading the file, one is for uploading the file. So this sounds quite obvious, and we have a third one, the check file info, which provides information about the file. It provides, for example, the file name, the file size. There are some parts that are mandated, but there are also a lot of extensions that I will show you later. So this is really useful. We can put a lot of information into this check file info. So the next problem is the authorization problem. So we implemented this by a security token. So obviously you authenticate the user into the web application, but when you want to open a file, the VOPI-like client, the Collabora Online, wants to download this file from the web application, so it has to authenticate itself again. But naturally we don't want to ask for the user credentials every time, so this is why we have this security token, which is generated from the user authentication data and from the file data. But it's recommended to create it that way, that it shouldn't be possible to guess user or document-related information from that. The next part is to write a JavaScript code to actually embed the iframe into the web application. And this iframe will contain the online editor. And for this iframe initialization, first you have to ask the server about this so-called discovery XML, which is also part of the VOPI protocol, which tells you for which document format, which parameters should be passed to this iframe, because in theory it's possible that different document formats are served by different servers. Or this discovery XML tells the web application, which document formats are supported in the first place. Ok, so when you create this integration, we have seen many, many attempts and many problems. So now we have a best, so-called best practice, or I don't know how to call that. So recommended steps that you should follow. So you probably wouldn't want to write the whole integration in one step. So the first step would be to just write a minimal application that returns the hello-word message. Then you implement a check file info endpoint, and then you can actually see something in your iframe, this hello-word HTML document. And then you can go to implement the access token handling and implement the save, the update rest endpoint, and so on. So this is the recommended way to develop. So if you need to tweak the functionality, you can of course change the source code, but there are other options. Because as I mentioned, we have APIs for changing the online user interface, as it was done for the collab integration. So with this post message API, you can add buttons, you can hide menu items, you can hide buttons. And when you add buttons, you can also add the code, what happens when the user is pressing it. So for all of these possibilities, you can see the reference documentation in the source code. So this post message API, which is also part of the VOPI standard, it's a method, it's a communication channel between the iframe and the integration. And from the integration, we only require that it sends post message ready message, and then you can use this API. Then the other thing, we have the check file info extensions. I wouldn't read them all, but we also have them in the source code. In the last line, I gave the link to the GitHub. Miror, so you can read it there. But with this check file info, for example, you can disable printing, saving, exporting, or disable the copy paste, or with the user extra info, you can pass the avatar of the user with the watermark text. Or you can pass a tile, watermark, and so on. So it's very well worth to explore these options. So as a conclusion, message is the partner with Collabora, because we are here to help you and when you have specific needs, prioritize them, and actually, all of these features were developed by or with the help of our partners who actually sell the product and we are very thankful to them for this. And just a few other things that came from these partner contributions. For example, the better PDF rendering in the online using the PDFium library, the library that Chrome uses. So we don't import the PDF by LibreOfficeDraw, which broke the PDF into individual shapes and tried to render them individually rather imported as a bitmap and it gives higher fidelity. Or I can mention this template source feature that was originally developed for Nextcloud, but available for all. So you can set a template and when you create a new document, you can select the template and it will be the new document in the online version will be created with that template. Okay, so that was all from me. Thank you for listening and if you have any questions, well, I'm probably run out of time, but you can find me after Candy or Michael or half minutes for questions. Any questions? Okay, thank you.