 So we have got the next talk. Next one is from Michael, which is going to talk about bringing Collabora online to your web app. Perfect, perfect. Well, thank you for coming. 10 seconds. OK, well, let's count down. Four, three, and a name. Thank you for coming. So Collabora online, who knows what it is? I mean, if you know what it is, I don't have to. OK, well, fair enough. There are a few people that don't. I'm sorry. So collaborative editing. Imagine Google Docs or Microsoft Office 365, although probably you'll get a headache if you imagine that for too long. So we do a document spreadsheet, slides, viewing, collaborative editing, phones, tablets, web, all that stuff. Brilliant interoperability. We are the Microsoft file format lovers. Now, look at us. We have to interoperate with all this wonderful legacy stuff, RTF, the legacy of the last standards war. You may think ODF is the standards war. But RTF is the previous standards war. And it still lives on in many governments, amazingly. PDF, Visio, all sorts of other filters in there are possible. And it does WYSIWYG rendering. That's quite important because other people don't necessarily. Like Office Word Online doesn't do WYSIWYG anymore. It's back to the Word 5 era of not being able to see how your document lays out. And I guess the key thing is that I should get my display to actually project the slides properly, so that you can actually see them all. That's probably the key deliverable at this stage. What is that? Is that 1, 280, 800? OK, perfect. Better, I think. Yes. And so you should integrate on-premise with your existing EFSS. So if you just drop it into one of these things, it should work nicely. If you're a learning type person, Moodle or something like this, Mattermost, if it doesn't do it yet, then, well, you can come to my talk. And I'll show you how. So the architecture is really a bet on CPU threads and network getting cheaper. We run a chunk of this stuff on the server. And so to install that, you then just grab a code image. You've got packages. You've got Docker images for every conceivable Linux distribution, of course, source code. And yeah, so you plug it in and connect it yourself and fiddle with your web app. Sometimes people like to just convert documents. So if you want to thumbnail documents or convert documents from flat ODS to PDF for invoicing, we can do that very easily as well. So there's a nice REST API there. Yeah. So yeah. But the integration is really just an iframe. You can check it out and run it, of course, like that. But getting data into it, so this kind of thing, this kind of thing. OK, so the demo stuff that we give you basically loads files off your file system, which is mostly what you don't want to do. You want to be able to serve through this nice API. So in terms of understanding this, this is a very simple piece of software. We require only libc, and that's pretty much it, of a Linux system. We have no dependencies once you include, you know, draw a box around the whole bundle. So we don't need a database. We don't really need the file system very much at all. But we do need to get data. So how do we do that? Well, we store that in, say, next cloud or own cloud. And we do that through a REST interface, which combines authentication and storage. So we don't do any authentication. I know nothing about XAML, and I'm very happy about that. And I know very little about object databases. I'm extremely happy about that. And metadata stores and clustering. My hope is that you've done all that already, and you have a plan for this kind of thing, and that we don't need to care, because you can give us a token, and we will give it back to you to prove that it's still us. And that's basically what WAPI does. So there are two things. There's a WAPI source, which effectively defines the file, or the stream it is, and its version, and so on. And then there's an authentication thing. We basically do a post into the iframe that sends those two things separately. And then, okay, so we want to get a file. We call a get on your storage. We do a web get. It's that hard. And we pass these credentials back and you decide. And to save, we do a post. Again, tricky stuff. And then there is a slightly tricky method, check file info here, and this allows us to do all sorts of cool things. So it gives, of course, at root, we could just fail on the get to give the file in terms of permissions management. You could go, eh, can't give it to you. But wouldn't it be nice if you could have read-only various different permissions? Can they comment? Can they edit? Can they red line? What's their name? Where's their avatar URL so we can do this little thing? And all of that kind of metadata tends to come back from a check file info. So there's this security token. Obviously, I guess I mentioned that before. We don't care. To us, it's a totally opaque string. But it shouldn't have anything to do with the document. So document stuff on one side and user stuff on the other. Because everyone that collaborates inside the same document has the same whoppy source. And that's very important when you come to spreading this over clusters and so on. Everyone needs to end up on the same node. So yeah, oh, there's a discovery, but honestly, this doesn't matter. You could look stuff up in the discovery and do clever things or not. But who cares? You can just do it directly if you like. Hard-coded, at least for prototype. So yeah, the check file info endpoint. Yep. And then you can just get a hello world very easily. You have an HTML document that looks well a bit like this. It's not very big. As you can see, there's a form action here. And it's got all these details that go across. And bingo, there you are. Yeah, I think that's pretty much the works. Now, of course, once you've got it embedded and it's looking beautiful as it does, you then might want to play around with it. Unfortunately, I didn't have time to test my live demo earlier, so it may probably well not work. So I might skip that for reasons of time. But essentially, you can post messages inside and outside and across the frames to do all sorts of exciting things. There's a little demo here that you can grab out of the source and configure as instructed. So actually, we configure it to do cross-site scripting checking by default. So you have to add local host into the configuration so it can trust itself to do what it does in the demo, which is that slightly ineligible thing. And then yeah, then you can play with it. So you can hide your menu bars if you don't want menu bars and you can fiddle around with stuff. You can even inject arbitrary calls to scripts in here. So you can send a Python script that runs in the back end and you can generate a form or a report or do database queries at the site. There's all sorts of things you can do with the embedded Python there if you want and drive that from the UI. And so some people, we have a customer that uses this for, are doing like, I want this area of a spreadsheet. I want to select a spreadsheet and I want to dump this somewhere else. I want to dynamically move data into these things and automate them. So that's all stuff that you can do. And we have a vast scripting API, obviously. 1,000 interfaces with God knows how many methods that you can use from that. Yeah, so you can also add your own toolbar, buttons and things, people like custom buttons. Did I mention you can theme it and skin it and CSS it to the nth, obviously. Yeah, so yes, it's obviously worth waiting to the JavaScript is loaded. I think one of the great benefits of JavaScript is not knowing what order your JavaScript files are loaded in and then what they're going to do when they load in a different order and not being able really to test that either. So JavaScript is just the most wonderful mess in the world when it comes to programming anything. It's just a living hell. I don't know, words fail me piling up all this stuff. And then the good news is that they create these tools that make it very easy to upgrade bits of the middle of it where upgrade means break all of the invariants I coded up above. So obscure things no longer work. But anyway, I digress. Either way, wait till the JavaScript's loaded before sending your post message. Otherwise you, yeah, you might have a bad experience. So don't do that. Good, so I mentioned the check file info thing. There's a whole lot of things that here like so. So one of the things we have is a thing called secure view. I forget if I got a slide about it. But the idea is that don't let the document leave your site. You know, you have employees in wherever they are, in North Korea, because you employ North Koreans. It's great, great move. And yeah, you don't want to send them the whole document. You just want to show them it. And you want to, you know, water market so that you can be sure it's them. And if they take pictures on the screen, you know, it's got their name all over it, this kind of thing. So you can turn off printing, downloading, saving, copy paste, all of this stuff because that all happens server side. And so you can just hard disable this stuff, which is kind of cool. Anyway, so there's all sorts of these different options you can do, copy paste. Because actually you're sending pixels to the client, not actual content, it's relatively easy to do that. Like there really is no, the DOM is all on the server, not in the client, which has many advantages in terms of performance. And you want to do the slow thing, not on your mobile phone, but on the fast server in the data center probably. What do we have here? Enable owner termination. See, I don't know, Kendi would know that. This is Kendi, who's awesome. And, you know, hey, development manager for Caliber Online. You know, look at that. Extra users. Oh yeah, so you know, your avatar and your email and all these sort of things. So you can then start to integrate with your crazy chat and la, la, la. You can do all that sort of nice integration stuff. Yeah, CSPs, aren't they? Wonderful for broken images. And watermarking stuff for watermarking tiles. Oh yeah. I think this is a great thing, you know? So it's very important. So let me show you some of the other people that have done this, just to prove that it's not impossible, you know? So Arrow are great. They are Java programmers, so that's good. And actually having used JavaScript, you discover that Java is a beautiful programming language, which is funny, isn't it? You know, because I always thought it was a baroque mess, but anyway, they were. So eGroupware, so we're doing some stuff here, you know, just embedded into their tool, their frame. Colab, who a company in Switzerland do a secure onsite on-premise hosted stuff. Next cloud, obviously, you just heard your sister's talk, beautiful integration there with all sorts of things, avatars and templates and all sorts of nice features, sharing, built-in and so on. Own cloud, similarly, and another PHP app. Pideo is, again, a PHP, but another integration there. A Roove, some random other company producing stuff doing this. A Matamos for your educational needs, chatting needs, rather. This is not a very pretty integration. I need to talk to Corey when I see him, if I see him to try and fix that. And we love to help people do that. So, you know, when you're struggling and it doesn't work, it might not be you, you know. So come and grab me or someone else, and we can help you get this integrated. And then, you know, there's all sorts of commercial stuff around there that we can talk about. I think it's an economically sustainable open source engagement, let's say. What else? Say, CobraLine for two. So this is sort of shipping in code now, but these are basically new features we've added in the last six, nine months, something like that. So what do we see here? Well, so we've got the sidebars now in Impress. So this is being tunneled through from effectively the PC application. And we're moving these to use some native widgets, I think, probably in the next year or so. But hey, it works really nicely for now. So you have really quite rich functionality there, all these different panels. You can be fiddling with the shadow of your text box and so on. It's just a huge wealth of functionality there. Animations. I don't think anyone else has configurable animations in their online office suite at the moment. You know, and all of the key stuff that you want then around presentations so that you can actually make a presentation. Master pages. Master page editing. Google Docs doesn't do it. Microsoft Office doesn't do it. None of our competition does. You know, it's just, but again, bringing that richness of the functionality from the office suite through to the browser. And our hope, of course, is here that we end up with a full function office suite in the browser that's easy to deploy centrally. And it's not just then selling own cloud to someone. It's also getting rid of that legacy PC installed nastiness as well. So you can start to actually, you know, in good conscience, move to a fully web-delivered, extremely secure, on-premise hosted, digitally sovereign solution, which is nice. What else? Nice new chart editing sidebar. So you can click on your charts and get different types of charts, conditional format. So often people have these drop-downs and they claim conditional formatting is done. You know, pick one and be happy. But of course, conditional formatting is insanely complicated and, you know, wouldn't it be nice if you could fix it so it looks like you want it? Function wizards. So you can remember what the 17th parameter to that really bad method does and so on. Color correction of images. Nice UI handles for sizing tables and selecting them. Improved spreadsheet stuff for auto-fills. Wouldn't it be nice if you write January, February and use fill it down, it goes March, April, May, instead of January, February, January. You know, that kind of thing. Ordinal suffix. First, second, drag it down, third, fourth, fifth. You know, these things are the basics that our competitors are just, anyway. They don't have the rich engine behind the scenes to do. Because that seems easy, isn't it? First, second, third, fourth, fifth. But actually, when you get to, you know, the plethora of languages we support. 119 live translations for languages. 145 people working. Four and a half thousand translators working on a translation code base. Things are more complex. Pop-ups for URLs to make them nice. Then bringing all of that to mobile. So previously, we tried to provide more desktop experience on the phone so you could zoom in dialogs and things. It was pretty yucky. So we went for a more feature week as we limit the features to, say, what our competition do. It's a bit crazy, but anyway. So a viewer, by default, you see some of these sort of fairly familiar, you know, click the button to play the presentation, undo, redo. This is all there, all open source. It's in the App Store, Calabra, Office Mobile Beta. You can install it and play with it. And then, you know, this kind of one-handed, you know, big chunky stuff, scrollable. But these are actually the sidebars, but wrapped and redone with native HTML widgets with CSS. And, you know, nice ergonomics, hopefully. Similarly, I showed you the chart type sidebar earlier. This is the same guy, but now scrollable and hierarchical and nested. And similarly for these guys, too. Pretty menus. Yeah, lots of individual features. I'm running out of time slowly. We'll have some time for questions. New theming. So, yeah, this is a nice bug. I should get a better screenshot. But anyway, the idea is you can use SVG to theme the native stuff. So it looks crisper and prettier and works better. Doing a similar thing for iOS for tablets. Done with Amphines, who is a cool partner of ours, in Switzerland. And one of the great things about this partner was that we sold the product with them in good faith to a customer who then decided they wanted it to work offline. And that's a bit difficult for a, you know, just kind of minor feature that you need to add. So anyway, they got a free port of LibreOffice to iOS for the price of it. Anyway, let's not do that again. But there you go. You got to please the customer, haven't you, at the end of the day. So we do all sorts of cool monitoring. So Prometheus text-based polling stuff. I don't know why people like to poll. I think it sucks, but polling is cool. I prefer the WebSocket thing we implemented first so you can get live data coming at you about documents opened, who's done it, and whatever from your cluster. So the cluster will connect out to your monitoring server, give you a WebSocket, and let you control it. Lots of other stuff. Much richer copy and paste things, new dialogues. Yeah, lots of anonymous logging. So you add all this nice logging so you can work out what's going on, and then you encrypt it all so you can't anymore with GDPR compliance, they call this. Obviously you have third-party penetration testing to make sure it's all, you know, safe and good, better performance, PDF rendering, simpler code for your threads. Yeah, ah. So digital sovereignty, don't let your documents out of your site. Highly secure, lock it up on your premise, right? Stick your document in its own CH route with almost no file system, nothing executable in there. Seccomp, BPF, filtering all the system calls around it. Underneath that, you know, load crash testing, you know, we've got a better covariate score than the Linux kernel, 0.00. Questionable if that's useful. LibreOffice kit, so basically, what about this giant thing, is it secure? We have never had a security issue inside these documents that could have broken out like that. So it's pretty cool, and you can really be confident in that. It's a picture of secure view. I don't know if you can see the watermark in the background here, but yeah, the contrast is not ideal, but you can see it here. Of course, we try and work on all kinds of background. And this is a really simple, elegant model against Microsoft's. Microsoft's model for DRM and sharing documents is that they sign everything. They sign your, you know, the TPA, their key ships in your BIOS, they sign your bootloader, they sign your operating system, they sign your office suite, and then they'll give you the document, the key for your document from their Azure cloud so you can unlock your document and be able to read it. Because they're now convinced that your whole stack from the hardware app is actually safe. I don't think that's a great model in terms of digital sovereignty. I think having a single American company hold all the keys for your documents and sign everything is just not very elegant, let's say it's not very simple. It can't be federated, and it has this massive central point of failure. And we can do better in a simple way that's federated that you own, that you control, you can decide who you trust, who you collaborate with, and who you give what permissions to. And we think that's extremely elegant. Our competition instantly claimed to do some of these things, but it's all enforced in JavaScript on the client. So hard to circumvent by pressing F12, obviously. Yeah, highly scalable, very simple architecture, no database, no separate message bar, no shared data storage. Scalability, one-on-one are using it for millions of users, literally. Yeah, composable operations suck, if you wanna know more, talk to me about it. 45,000 users, well actually don't talk to me about it, just consider sorting a spreadsheet and changing a cell and trying to work out what the implications of changing the cell are by walking the entire dependency graph that could be vast to see if this cell change affects anything that might impact the sort. And now try composing these operations across each other. Okay, and when you've sorted that out, you can come and tell me how great operational transforms are. Good, so we just do everything live as it happens, and that turns out to be simple, slick, bulletproof, and not have any, oh, I can't synchronize across my cluster properly. So in terms of CPU usage, this is pretty simple, 45,000 users using it there, spikes of about 6K users online occasionally. It runs on the spare hardware leftover at the side of the massive next cloud cluster. So like the balance of hardware that's spent versus the database metadata storage is trivial. Do it in the data center, not on your mobile, if it's complicated, and that's it. So our mission is to make open source rock, and hopefully we're doing it. We'd love to work with you to integrate with your EFSS, so thank you. You've been very good. I think we have about half a minute for questions, do we, is that right? No, five, we have five minutes for questions. Ah, I'm very happy, that's good. I could have gone more slowly. Let me tell you more conclusions in a minute. Sir, your question? Sure. Using CSS, because since everything is rendered from the server side, how are you going to fix that? Yes, so obviously you don't wanna style your document, the bit inside the frame, well maybe you do, but you should use the Office Suite to do that. So rendering that on the server is not a problem. In terms of theming the widgets, there's SVG for doing the icons that you can fiddle around with, and that's fine, it's a subset of SVG, because we don't really want the animated JavaScripted stuff running on the server there. Obviously, so it's a very restricted subset. So you can't CSS everything is the answer, but on the mobile it's much more, Kenny, give a good answer, Kenny, yeah. Ha, ha, ha. Open document, editors, dev room, yep. So yes, if you want to go to that, Pedro, who is our designer, will show you how to do the whole works, and if not, read his slides afterwards. So yes, so there's a lot you can do, and there are some limits too, particularly around the legacy dialogues. I think in a year as we start to move those to being more client-side rendered HTML dialogues, then knock yourself out. Let's do every bad idea of blink tags and whatever else and then just pile it in. But yeah, yeah, it's easy to do. Good question, another question? Sir? Sure. Oh, the paid customer is very easy. You just mail it to support at collaborative.office.com. Oh yes, how do I file report bugs? So if you just mail us, it effectively creates a ticket as you do that. And we track that ticket? Yes, to a degree. Yeah, so that's kind of split between us and next cloud. If you're having problems with that, poke me. Just email me or mail, just mail me, it's probably best. And then we'll sort it out. But yes, yes. Next time moves at a great pace and innovates quickly, let's say. So I think there's, yeah, there's things we can fix that. But yeah, I'll give you a card in a second. Other questions? Sir? A little bit building on this question. Sure. So is it working fine? You want to do monitoring essentially? Yep. So when you do a make run like this, it gives you these wonderful things here. And so if you just launch the link, then you have an office suite. And if you have a new window, you can do this and you can see collaborative editing or whatever it is you like, right? So that works reasonably. And of course, there's an admin console. So as I say, if you like the whole, here's a whole load of quite boring variables thing, you can do that. Or you can go to the live admin console that'll tell you there's this many documents open and who's doing it and okay. So this integration is not cool for the files and the users are online and so on. Okay. But potentially the problem with this command, of course, is for a development addition, we're not really eager for people to be able to load things off the file system normally. So that's kind of disabled in builds, but you can go to the admin console. If you're a glutton for punishment, and I am, so if you give a user one kill, which is a great, great API, then it essentially dumps its entire internal state, all of its sockets, all of the file descriptors who they go to, what's in the tile cache, you know, when it last saved, all the permissions about it. And that's quite nice. For various reasons, this is used to debug complex threading situations. And in consequence, it takes almost no locks, almost all the time, that's absolutely fine. And it's extremely useful when someone's deadlocked in a thread. However, it may crash your server. So it doesn't crash mine, at least very often, but just be aware that sending a user one is extremely powerful, sharp developer tool. Sounds good? Excellent. Thank you. Thank you very much. Thank you.