 Hello everybody So apparently you're gonna have a bit more of me than initially planned because You're gonna have none of the person that was supposed to talk after me Sorry for that in advance, so Let's assume that you are a young Young developer or something and that you got into this business with a friend of yours that told you look We're gonna make applications for people and they're gonna pay us and it's gonna be cool we're gonna get rich and Assume that somebody else has done the job of convincing clients that they need to like buy from you or Do some some applications and now you have to execute it and The you're the developer you have to execute it and you have the choice of developing it from scratch Because you're a developer you can always reinvent the wheel or you have the choice of using some existing bricks And these existing bricks can come in different in different shapes They can be They can be just libraries that other people have wrote or they can be fully fully fledged systems I want to talk to you about xwiki as collaborative applications development platform so Let's make it a little bit more precise not just any application There are some applications that have like the group of applications that can be handled by xwiki have some specific Characteristics they are web applications, so it's gonna be in the browser. Don't imagine mobile applications They're gonna be centered around content So it's gonna be about some sort of content that some people will want to publish through this application or or like work with it and They could be collaborative. They don't have to but if they are then it's it's better Why what is xwiki? So before I tell you why you you want to do it with xwiki we Would better mention what it is Ludovic has talked about xwiki a little bit before so Ludovic so xwiki is an is an enterprise wiki engine I Put wiki in between quotes because it's you're gonna see later is not that much about wiki then it is about Collaborative applications in general Where you can have some user defined structured content so you can You can specify that and it has scripting and APIs that are available to the let's say developers or administrators So all these things put together make it more like an applications platform rather than a wiki But keep in mind also this presentation that it is actually runnable software It's a software that runs. It's not a library so Now you have to do the job of creating this application for your client that is centered around content and collaborative and all that stuff and You could use a couple of bits and pieces of xwiki to make your life easier one of the things That that xwiki has is that everything that it does is collaborative by default So you're gonna have multiple users that are going to be involved in everything that happens on the wiki you're gonna have versioning and Every resource on the wiki is actually a page that will have versioning and that will have history So these things are built in the tool So if your application that you need to build for for these clients that you have Needs to needs to track a little bit the changes then all this is built in then you can kind of Difficultly get rid of it once you get used to having history for everything It's gonna be like really really tough to not to get unused for example I find it really frustrating when I rarely do but I do sometimes do some interventions like what a file system on a server configuration file and then I realize that Something has changed in this configuration file And I don't have the history of who has done it and that one at what point and why while on the wiki you have all that on on on on a wiki like engine The the second brick that you want to use or that you will like to use is the fact that you have you can Have like regular text regular pages like in a wiki normal wiki for example Article that just contains text but you can also have structured data and this structured data will be defined by you really easily Like if you really don't want to code you can do it in the browser with drag-and-drop, but let's assume you want to code because you're So you can have types of metadata that are associated to pages you can have short text long text numbers dates Lists of users multiple select list single select list So also all sorts of type of data that you might imagine that you would want your application or the data of your application to have and What's really it's not this is next slide. Sorry What's really interesting is that the definitions of the metadata that are associated to the pages They are also pages on the wiki. So they're also they also have history and all these things now You don't have to define structures for the pages. You can also use the the pages as just plain text content So if you manage to think about your application that you need to build if you manage to think about it in terms of Pages that have text and structured metadata associated to it You're already you have already entered the x wiki framework if you want and you're gonna have all sorts of benefits That will come from this the first benefit is that the the the crud Lifecycle of data that create retrieve update delete is already Happening you don't have to work for it once you have defined structured data that is associated to the pages You will have for editing for those pages people will be able to click edit the filling the data in the form and then hit save and You won't have to write one line of code for that because it's all built in the system And it's working out of the box and this can be quite interesting like I put here a screenshot of what can happen If you structure your page you see you have this you can choose An element in a list you can pick a date and all of these things If you don't have to worry about finding a library that works that does this job then integrating it in your application and so on It's all happening Also forgot to mention By default for editing text there is the seek is there's a ck editor with a big editor Which is quite powerful rich text editor So you don't have to bother about integrating that either because otherwise you'd have to kind of figure it out then Because we're talking about Runnable software. It's not just components or just libraries You already have the concept of users and access rights. It is already running from day zero in your in your Application that you are building you have users users can be grouped by rules and you can Define access rights on the on the content on the data that you have structured in your application So when you structure your the data of your application when you structure it as wiki pages That are organized in a tree and with metadata associated to it This tree will also define how you will be able to define the access rights on that data But it's already built in the tool It's the same if you want to do this without coding one line You can do configuration of access rights and really complicated ones without writing one line of code Which can be quite neat like you can get your application started really fast the the rights in xwiki they kind of the the the atomic unit of Content that can be controlled by access rights is a page so page which means plain text and Metadata that can be associated to this page But if you want to do that final grain you can like split your stuff in multiple pages for example If you want to have final grained rights, so it's there's going to be some sort of a Thinking that you're going to have to do beforehand in order to be able to have that But you have the users and you have the groups and the fact that the platform already handles users for you Authentication and all that it's already a big benefit. You don't have to code that you just it just happens It just exists in the tool and we'll see later the benefits of the fact that you have it Then you have a search because you have your application you have your application that revolves around people creating content and collaborating around content and People will want to search for that content. They will want to oh I want a search box here If you need to code that you can use some existing libraries There are some tools that you can integrate But in xwiki you already have it like when you structure your your data as pages The search is already there and the search engine is already indexing all the data that you put in there Actually, if you don't want the search you need to deactivate it because otherwise it's just there and people will be able to search for stuff Most of the times you will want to you will want to hide stuff from people That's quite unusual But it happens because you're gonna have all sorts of configuration documents and configuration files and People are gonna be able to find that and they're not gonna know like why why am I seeing this and so on? So search is already there. It's based on solar. So it's really powerful You have faceted search and the structure data appears by default in the you can you can use the structure data easily in the Search facets like in the advanced filtering for the search. It's already there. It's running from day zero also forgot to mention it's not that important that deserves a It's own slide, but it's really important. There's xwiki language aware. You can tell to the wiki okay, this wiki is in French or this wiki is in German and and All the content that will be created will be tagged with that language And it will be taken into account when you're gonna do the solar search And this is really important because people want to be able to search properly in their language Also by default you have a responsive customizable UI so you have the default UI of xwiki which you have seen in the screenshots until now which is Nice really cool, but it doesn't contain your client's logo and doesn't contain your clients colors and stuff like that However, it is responsive. So you have an application that is already responsive out of the box You don't have to do anything for it and in the administration section of xwiki. You can easily choose the colors You can choose a different logo and things like that. So you can do some basic some basic Look and feel without actually touching any line of programming or code or whatever just by clicking But you can also go further if you want to do more So that that's also in your application because people usually want that You also have notifications by default on all the content that is in the wiki. So When your content will be wiki pages, you're gonna have notifications on that Which also uses atomic element the page when a page changes or is created or things like that And you can see these notifications in the in the UI of the wiki. There's a little there's a little Bell and you see what's happening and you can also receive them by mail I think it's a little bit harder to turn them off No, you can't turn them off then to have them on but as soon as you have content in the wiki Your users will have this feature by default and they can configure it in their profiles So that's also you also have that if you want You also have data import if you want your client tells you okay beautiful application content stuff But all my data is in is in office files How am I gonna get that in the in your system in your application that you just created? You have tools to do that in x wiki. So we have tools to import the data from office and also from CSV files or Excel files because people might have their structured data in Excel file and Then people tell you okay great. I'm working with all these people I'm creating but I would like to export them in PDF. You also have that in x wiki So export in odt formats or PDF formats is a click away So you also have this feature that will be part of your application out of the box You don't have to code for it. Well, unless you want it really a bit more more more complicated You also have I might need to mention because it might be important for some of you You also have a rest API's that are there by default. It's harder to turn them off than to have them on meaning that Your data is already accessible through rest API's if you're building it on x wiki As I have been mentioning already a couple of times this is running since day zero So it's wiki is a runnable software is not bits and pieces that you have to connect together or things like that It's running from day zero and all these features that I have mentioned They will be present in your application in one form one or another Maybe it's not gonna be the best form that you want, but you're gonna have that in a form For example the search it might not be finding things or using the proper criteria But you're gonna have a basic plaintext search that will be available in your application And you can so you can build all this incrementally starting with a with a with a base base version So the only in this like the only operation that you absolutely have to do is to structure a data Like to think about how will I structure my data and how will I put it in the week? Also x wiki has some extensions so you can x wiki the engine The platform you can add some extensions to it There's a store online with the stations contributed by people and things like that The advantage of that is that you can get some stuff for free for example the authenticators The authenticators is really cool because you have the user system of x wiki and if you use that user system You can connect that with an authenticator from the extension Store and you can have open ID authentication in your wiki out of the box You don't have to code for it. You just install one thing you configure it You put some URLs and stuff and and it works and you can also install additional applications to complete the ecosystem Like you have built some stuff for data, but your client also wants a blog in the application You just you just click a button you install the blog application and you also have a blog and you can also customize everything like The the way that I mentioned these features is more like the what you can get without Coding anything like just clicking stuff But if you want to code you can code and if you've seen the presentation of Ludovic from 40 minutes ago or so you have seen that you you've seen that you can script stuff You can use external libraries You can integrate all sorts of things in x wiki and like make it go really Further for example if you don't like the forms that x wiki will create by default for you You can actually put your own JavaScript your own CSS your own html and you'd you like make it exactly the way you want it So sky is a limit you can go all the way. I have forgot. I had this slide thought that was it You also have the usual project life cycle because by now you are probably thinking yeah It's great But then my stuff is gonna be in the wiki and I cannot work with other people I cannot we cannot use a usual build system and things like that actually Everything that you do in the wiki you can serialize it at as XML then it becomes a Source file if you want that you can put in a it becomes an actual source file that you can put in a in a SCM source con Yes source Git in a git yeah, you can put that in a git and You can build it with Maven modules that are available and then it becomes it creates a deliverables And you also have applications to actually commit directly from the wiki without going through the serialization manner So you can have your usual project development life cycle with no problem And it's easy to upgrade. I forgot I had this slide So basically you can actually pump up a little bit your application just by upgrading the underlying platform Imagine that you are actually building this on top of x wiki and one year later X wiki has evolved or I don't know we switched to bootstrap 5 is like Oh, I would really love bootstrap 5 you just upgrade the underlying platform Backwards compatibility is really a core value of x wiki So when you develop stuff on top of x wiki it will be backwards x wiki will be backwards compatible so old stuff will run on the new stuff and And you can actually get a lot of new things and fresh things for free With you all the way as in x wiki is nice is Good for all the phases of development of this application. It's easy to prototype because it's running from day zero as I said You just install it. You have something already During the development it allows you to to work incrementally like you can have you can build some bits And then the others are default and as you build them you you make them You they're part of your application and during the maintenance phase So the the phase after the deployment of your project during the maintenance phase You can easily do upgrades and also do nice easy interventions directly from the browser if you need to fix stuff a couple of examples maybe So we did doesn't look at all like like like the default UI of x wiki and things like that So we did know the match that goof.fr which is a website where people go to vote for how they are Administrative procedures have how it worked. They're online administrative procedures Like they had to declare the birth of a kid online and how did that happen for them? And so this is a customized nice web page with a search that is default in x wiki This is a form that is not at all standard in x wiki We have built we have done a lot of work to make this form with smileys and stuff like that so this is possible it's possible to go this far and then we used some extension to make these graphs we didn't Code them we just installed some stuff and it worked and this is a demo of the search Which is default in x wiki We just added a couple of lines of CSS to make it look a little bit sexier and we have this application We haven't like we have worked for it, but it was done easily by reusing components There's also an example in the wild v calc.com which is a repository of components for v calc and documentation for v calc as far as I understood So it's also very nicely for formula Yeah Yeah There's multiple types of stuff So they're using some structured data because they have types for the for the resources that are available on the you could consider it a wiki I could look at their history Of the history of the pages and I could see that they have customized for example They put the rating in the search. They they use the plug-in of x wiki, which is Which allows you to rate pages and they included that rating as a criteria in the search and that's actually really easy to do don't have to code for it and Also another nice example of a project that looks like an application that could have been done from zero But it's not it's based on x wiki. It's the dictionary of the Switzerland of Switzerland of Any Swiss in the room no It's in three languages. Yeah, so it's a sort of a wikipedia of Switzerland, but Private one made by the state. It's like a State institution that is handling and it's publishing the the the the history of Switzerland and There's this gorgeous There's this gorgeous home page and then they they have criteria that the metadata that is associated pages that allows you to search for stuff and so So apparently time is up. I thought it was too much, but apparently it's not Okay great I Can do what they are in 10 minutes, okay? Let's go Yeah, yeah, we can look at Do I have enough internet to do the live demo of HLS Second I'm gonna put it in French because there's no English version and I don't actually understand German. Sorry So this is a beta version and it looks a lot like a Regular encyclopedia like a regular wikipedia because it has text, but it's actually very structured and You can see the structure for example if you are Picking a person Sorry already when you when you navigate the list of of data you have these You have these this navigation here, for example You can groove by by people and then you can choose a category like people in the politics after 1848 and You can choose a subcategory and so on and this is possible because the data is actually structured And you also have different criteria of categories You have the place where where they are acting the time and the gender of the of the of the people And you can do all this filtering because the data is structured in the wiki and you can actually take advantage of all the elements of xwiki So this is actually there's a search here. This is actually the default xwiki search. It's just really Nicely customized so these are the the search filters that I have shown you just before they were gray now They're not gray anymore. And this is the the actual oh They they hit the button of showing all the occurrences by default in xwiki when you do a search You can you see a couple of highlights of the search results in the page and you can hit a button to see more But here they have shown the highlights by default and you don't see the button for more So this is the default xwiki search that is running on this data. You can also see here the the The xwiki feature of multi-language of multiple multiple languages What else is there in here that is really interesting all this UI is really Oh now we're we're in Italy And if you click on an image you have Yeah, this is just so this is a regular table of contents of the page Somebody has worked with it and displayed it somewhere else So there's a lot of JavaScript and CSS that goes into having it look like this So somebody has really put some a lot of work in it But it's possible to do it and it's possible to keep all the features of xwiki And I will click on an image because the image is interesting Because there's a lot of metadata that is associated to the image. So it's not just an image It's actually there's metadata that was associated to it because in this case They have done this choice that I was mentioning at the beginning They have done the choice of splitting article content and article Multimedia in two different elements in order to be able to handle them separately I mentioned that when I mentioned rights like if you want final grain right rights You just split them and actually the whole content in the back end It's split in multiple pieces because on each paragraph of an article somebody else has a rights to Has different rights on them. So this is a choice that you will make like when you start building your application and from this choice you will you can End up in some places with their applications that can be dead-end or there can be huge benefits depending on how you made your choice at the beginning And I think I still have a little bit of time. I'm going to show you the the this This website Yeah, not that many Let's look for No, I wanted the second one. Sorry. I wanted the second one Because it has nice data So I could be actually submitting this form to give my opinion, but it would actually be registered in the system So I'm not going to do it because I haven't Modified any association. I don't have any and this is a plug-in. I was mentioning This plug-in actually it's possible because the data is structured in a certain way And then we just put we just install this plug-in that makes graphs and we tell it what Which of the metadata of the documents that we have need to be used for the graphs and we don't have to code this stuff It's just a it's the I don't know if you've shown it the in your demo Ludovic It's called it's a macro that you install from the extensions and you tell it okay I have my application. I have this structured data Make a graph out of this data and stuff like that. It's just happening magically. You don't have to worry about much Other than Dealing with changing opinions of your client about what the application should be because everybody has a problem Please reassure me that everybody has a problem Okay, I Think I'm gonna Not stop here. I'm gonna do some more demos It's still French stuff. Sorry For the people that are not speaking French So this is actually another type of application that is really Adapted to building with xwiki is a resource center for people that work in the public administration in France to continue their To do ongoing learning and this is a resource center So it's gonna contain all sorts of types of resources. There's gonna be Apparently we don't have the categories anymore. Oh we do Here so you have different types you have thematic files folders you have Official texts you have Acronyms so in the acronyms list you're gonna have the list of all the acronyms that you might find somewhere And you can actually go and look it up here, and it's gonna have a definition It's gonna have a like an acronym and and the definition and All this is structured data in the wiki You can have official texts like which are related to laws and things like that So all the all the all the resources are basically structured by type and and grouped by type And you can access them by type and I hope they are used in the search I'm not sure but I think it's using. Yeah, sorry. No because yeah, I Remember now it's GSA It's GSA because they somehow didn't like our search. Yeah, sorry for that Apparently it was not enough for them and they plug the they plug the Google search appliance on the search on this particular Project as far as I remember you can also do that if you want so if somebody doesn't like our solar search or whatever They can plug something else That's it. I'm gonna take questions I'm sure there's a lot Yes Yeah, so as I said the the the the data is structured in a tree and you can imagine a Imagine like a folder system on a unique system. You have a folder system and you can have Rights at the root of the tree that will apply to all the tree and then you can overwrite these rights somewhere down Somewhere downwards in the tree and these rights will block the stuff that is inherited and so on So it's really really flexible from this point of view But then again the core operation is going to be the structure when you start your project and you think about your data You're gonna have to choose a proper tree for example at that moment That will take into account the rights that you will want to give people You can also do rights individually on each page, but then it's gonna be a little bit harder to manage So if you really really want to handle each page individually and access rights for each page You can do that, but it's just gonna be tough to remember what you did and where it's gonna be become really quickly a mess Yeah, the the scripting API so the scripting API that you that you have and you can always use if you want the scripting API has API to check Right, so it's Sorry By default no so the question is whether there's validation in the forms by default No, but there's a mechanism that allows you to do that to do validation Server side first so there's validation server side is the one by default Which reminds me I need to refresh the tutorial about how to do that because it's a little bit oldish But you can do that it server side first and then on the UI there's I think there's some JavaScript API that you can use to do JavaScript validation but Yeah, so you can have validation It's a it's a feature in the core of the crud of the save part of the crude system Because save it save it's gonna be like the the save API on the server and the way it works is that as long as you send the data With the proper form names to the save it's gonna save it and there's it contains validation in it and so on so if you Send the proper stuff It's gonna do validation and not save and send back an error saying I couldn't save because of And you're gonna have to handle it Other questions. Thank you