 Okay, so Thank you everybody. Thank you for the presentation. So I'm going to talk first a bit about a liar that means Ada library repository and Talk has three parts. That's why we have we are three people I First talk a bit about general things about the project How it started where it's now and a Bit of the internals and then comes the fun part which are two demos one about how to begin a project with a liar and Another one on how to contribute your projects to a life. So Let's go Yeah Why in the first place this project exists? Well, I think that Nowadays Every language every platform has a way of installing dependencies installing installing other projects and Truth is that We have become used to be able to do this. Yes Sorry and Well, this is true for for more for young languages But it's also true by for other well-established languages and platforms so a question that gets asked from time to time is how do you in Ada find new projects to use or how to install dependencies and Well, we have to say there is no way in Ada You have to fish the projects around and install them manually and then you can use them And the truth is that when I started this project, there was to my knowledge no related for Ada besides the outstanding efforts for the Debian which has very good support for Ada packages then there is a project from The Merino, which is a kind of system package manager So it's not for Ada, but it has very good support for Ada packages and then we have now Liar, which is really oriented to to support the Ada world so another more for the list and then besides the the Expected expectancy of having this or the Comfort of having this there are real advantages on using back For starters It simplifies reusing code if you are aware that the libraries exist and you can install them quickly and easily and Also, if libraries are classified with proper descriptions and tags You are more likely to find something that you can reuse instead of rolling your own solution and First platform library manager will help you in Making your libraries available in a number of platforms not only in the on the platform you are working It can help in to Providing reproducible builds if you say this Project builds with those dependencies and if you build them you will get the same binary that I Provide info download you can verify that you are using the proper dependencies and finally in and the first evolving world of software It might help on updating your dependencies when new bugs are found vulnerabilities and so on You just do an update and you get all the new versions of libraries if they are properly maintained And you get a fix it exactly on And well, that's about the motivation but now moving in particular in I Just checked for the for preparing this talk When this all started and the community has debated the from time to time about this but it was now Crazy back. It's not four years ago that I Opened the first repository to have discussions about this and we had some talks also in the news group then for two years nothing else happened and Then is when I sent the first session to other Europe, which was rejected properly because it was really rough at that point in time The same year in 2018 I did a research visit with a decor and For other matters that you saw this morning if you were here and that gave us the opportunity to talk about the The that the a da community was looking for a project manager. There was none a decor was also interesting on having something for this so from from that we kept in touch and last year a decor also gave support to the project Which allowed me to work more time on it and also people from a decor It's also contributing now. So yeah, it's not a single single person before anymore and just a couple of months ago and Fabian I think was you that you invited some people to start testing the project to find What's what's okay, and what's missing and to have new points of view and so on and He also suggested that today is a good day to since we are in a developer environment to announce that We can start the public beta. So all feedback is welcome in particular We are developing on Linux. So Feedback from Windows and macOS More needed and So it is That's from the historical point of view but in terms of functionality My personal feeling is that right now is when the project is starting to come together in the sense that it's starting to be really useful as part of the Closet beta we got many contributions of Project that of course people in the Aida world know that are that exist but now they they are starting to be Accessible through a liar and also We have a better picture of what is missing versus what is done because up to this point and at some time sometimes I felt like a programmer doing a Programming a game but not playing his own game because it's busy programming the game and So I'm doing the things in a liar and I always use the same features But I don't have the perspective of other people and this internal beta and the collaboration with Aida core has given me a much better perspective on What's missing and what can be done? So for the immediate future and well, of course what can be done? You are going to see firsthand from the demonstrations and And I will talk just a bit about some basic capabilities, but If everything goes to plan, I expect that 2020 is going to be a very big year for the project because with this knowledge and On the momentum we have gained in the past year. I think we are going to Close the biggest holes in the in the product and so Some things can be done, but Are very inconvenient to do right now like the publishing workflow. It's a bit You can do it, but it requires some knowledge and some well, you will see and And there are features that we want to have that are not there like reproducible builds for example and as I said Well, if we want to also put out the first stable release with binaries The project is already compiling in the three platforms. It's going through continuous integration But as I said, we are using it mainly in Linux so feedback from the platform will be very welcome and That's more or less how the project is right now and You are going to see two demos. I have planned to do a little Demonstration but the computer is offline. I'm not going to do it But the gist of this demonstration was that even if you are not an AIDA developer Or you don't want to use AIDA dependencies Allier may serve to test data software in a simple simple way by using the get command you Retrieve all the sources needed to build a project with all the dependencies and you can test it immediately so That even if you are not interested in learning about allier or Digging into a development. This is a tool. This can be done already And of course you can search the project Well moving a bit into how the project is is done. I Talk about a few internal internal things and I For starters the project is in github There are several repositories that you can find there all under the umbrella of the Allier project project and They contain the community index the main executable and library and other supporting projects and Here a note about terminology in the Allier index Repository will have the community index what those mean the community index is all Composed of open source projects Contributed projects Allier supports Handling several indexes if for example you have private indexes with your private software that you don't want to publish Or that is not ready for publication yet or things like that. So this kind is the kind of the official index from the project Then we have two eta projects that for now live in the same repository I guess at some point they will have to split but for now we have a library component that could be used Maybe to create a nicer interface and then we have the command line tool that in the spirit of other tools like Gith and so on it's a three letter command. I find myself sometimes mixing the Git and Allier commands already and Well, that's the another of the terminology And What kind of? package manager is Allier Of the many possibilities well Allier sandbox in the sense that it's it's not going to touch your system It will create a folder inside that folder. You have everything you need for the current project you are working on Is oriented towards the Ada language we are doing it for the open source Ada compiler Which is the net and so it's not intended to to manage a Platform or a system, but only to give you development for Ada It works with sources Ada is highly portable. So There is no pressure to distribute binaries Everything is downloaded and compiled And finally is a community effort in the sense that there is no it's not sanctioned by any official Ada body In the sense that for example rust cargo is part of the tooling of the language officially So that's where Allier is located Well Allier and if you have worked with package managers, it reduces the same ideas which is named releases with semantic versions and We we use the term create to refer to a Several releases from the same project because the other Possible names are taken in the Ada world for very precise meanings This was a kind of maybe controversial decision, but it has a very precise meaning that other developers know so that's how it is Semantic versioning you I'm sure you know that is the way to ensure that you can update your packages without breaking the build If everything is properly packaged, so I will not stop too much here and Well, here we see an example of how dependencies Realize once you retrieve a project. We can specify that we need two libraries and those libraries are solved Recursively incorporating their own dependencies finally you reach a combination of dependencies that Allow the build the solver in Allier is complete. So if there is a solution itself should find it and To conclude here's how it looks on disk when you work in a in a project You have your project with your files Whatever you want and everything else is within an Allier folder Which is intended to be put into the ignore list of your version control system So you don't need to know anything about Ada internals Allier internals and in there you can find mainly the dependencies that are needed to build your project and This is the end of my introduction now I leave you with Fabian and Pierre Marie Okay, so do you so Pierre Marie will be typing for me Sorry, we try to fix that Okay So the first demo is going to show how great package manager Especially Allier is to start prototyping projects in Ada So there are many libraries available on the web for Ada But the fact that they are all in Allier makes them very easy to use and so very easy to create a new project quickly So the project that we are going to do is going to take and going to read a configuration file in a tommel format and Generate a PDF with a square in it and the color of the square will depend on the configuration in the tommel file So first we're going to start by creating a project so Pierre Marie will use the Allier init command Specifying bin because it's going to be an executable. Otherwise, it would be Lib So, okay, you can you can create that if you go Yeah So you do have so yeah, you do have to right now you have to compile Allier yourself Because we don't have binary release yet and of course you have to add it in your path So the project is created now. So if you go to the to the my project directory so Allier is already creating some base files for us So you can already do Allier build to compile it That should that should work So now I want to so I want to have a tommel file as input So I'm going to search in Allier to find if there's something available. So Allier list so here we use we use a local index to Not rely on the network for this demo. So there's only what we need Actually, we're missing a few characters on the left, but there's there's an Ada tommel Project here. So that's exactly what I need so Pierre Marie will have I want it to Well, I think it's gonna be okay So yes, right perfect So now we want to use the Ada tommel parser So we are going to specify that it's a dependency of our project with the the width command So Allier with Ada tommel And so that's it. So here everything is local But otherwise you would download the the sources from the from the network But here everything is local. So now we can open the the project file and add the dependency in the project file so with Ada tommel That's it. Okay, and now you can close and recompile and now we we can compile with the dependency So Allier was also compiled the the tommel library And so now we can start working in our source file And first we will with the the the Ada tommel package Maybe Pierre Marie you can start copy past from From the thing we prepared that would be easier So yeah, we're gonna with the tommel file and also add a text. I have to have some text output Okay, we're gonna create a result Variable actually it's a constant That is this is the result of opening a tommel file. So that's the Ada tommel API And then yeah, the first the first if statements We're gonna check if we we could open or not the the tommel file So yeah, okay, so now we can go back to the to the command line and you can compile the The project. Okay, everything works fine. And if you do Allier run This will actually execute our program and of course we don't have any tommel config file. So we see the the error is here. So now you can open the config.tomel File create a config.tomel file and we are going to put some Parameters in it. So we're gonna set RGB values in floating point. So for instance r just r equals 0.5 and g equals 0.0 and b equals 0.0 for instance, so that's our tommel configuration Close and if you run again this time, we should be able to load the tommel So now we have the ability to load a configuration very quickly And now we want to have the possibility to export to a PDF So we are kind of look in the in the list of project that we have in Allier and we see that we that's very nice Thank you, Gautier. We have a project to generate PDFs. So same procedure Allier with APDF So now it's a dependency. We can open yet again the project file to add this in our project No, I don't think the name is the same. Actually, you have to look on the PDF out I think Yeah PDF out the nuts. So you can remove Okay, nice Now with the go back to the to the source file, we can Copy pass the value. So here We are reading So from from the from the tommel result, we are going to get the r g and b value and convert to PDF output real types So this is reading the the configuration from the from the the tommel file Yeah to the end and then we open Yeah, we create a PDF We set the color from the configuration and we draw a rectangle and we close the PDF So if you save and do Allier run actually because Allier run will also try to build before And hopefully this is going to work and if you open the PDF We should have a somewhat red square So that's it for the demo just to show you how Quickly we can prototype stuff with Allier. That's otherwise it would would have been possible before but you would have to Search on github and download things and you don't know to install them etc. With this it's extremely quick to do so so now to Pierre Marie for Now that you have benefited from the contribution of the community how you can now contribute back Okay, thank you Fabien So yes, we have this great project and now we want to make it available for the outer world So there are several steps to do it. So I won't do it here because I'm offline but The step is to first clone the git repository that contains every catalog of every Ada project registered in Allier Then you add this index you make Or it should be should be Allier Allier here three little acronyms anyway You make Allier aware of this index that you have clones And then you have to so write some configuration file to describe the project that you want to make available to the outer world so this This file as is so it's a it's a tumble tumble file tumble is a It's a it's a it's a syntax that looks like any files for those who know it and it's very simple But most importantly, so what's what data you have to put in the in the in the file it's described in In a in a document that describes all your what you need what you need to to put there And so yeah So we'll do this in a moment, but just for the What we have to do so it's we want to put the name of the project that we want to contribute to to contribute Some kind of text Free proposed text to to describe what the project is about we can put a website We can give a list of authors. We have also a list of what we call maintainers So it's the people that so you when you write tumble file in in alias tumble files in alias It's you are a maintainer you have you are the person not necessarily that's wrote the project that but The person who makes this project available to to the outer world. You are the maintainer And yes, I'm really specific so Generally Software evolves you don't want to so you when you publish a project It's the first version but you want sometimes to publish all the versions updates And so in in in the index you have one file that describes all the the various releases And so it's time to to do the demo okay, so As I said, I want I want to do the the the regular clone because I don't have internet here but Okay, so we have this nice project and actually the index a fake version of the index is here so What does the index looks like? More like this so Each tumble file describes one project that is made available You have this this file that is the a kind of manifest And here well, this is not what you should have usually. I mean this These two archives are the sources of the project we want to contribute You are not supposed to put them in the index in the index you put You say oh, okay, this this source package for So for the release one of my project is well download it on github on from somewhere else But here we put there here just because of the demo effect We don't want to rely on the internet on being able to reach the internet all right, so I don't know the format the format by heart and I think nobody should bother Actually learning it so I just Take another something else as an example and write my own so Yes, first of all So my project is called my project. So I'll create a directory to put All right, so I'm creating This file to describe my project so first of all I have to put Some general information about the project so I can put a description Here we are so Who wrote this library? Well, it's Fabien. You are the author on the other hand. I am the maintainer so because I'm I'm the one watching the tumble file And something important It's the logins because the So this is my my login on github the contributing to the community community index on github is special We are Making up rules so that when you write When you contribute a project you are the only one able to modify it in the future And so putting my login here make sure that future contributions to this file will be only I will be able to do them All right, so Now I give the list of project files that are part of this of my project. So here it's simple Ah, all right License, I don't think it's It's optional. Okay, because we haven't chosen the license for your project. So no that no license. All right And then So this is the first release Of this magnificent project. So this is release zero dots one And oh so Yes, I need to create a source package. So that's a layer Can pull the get the sources from somewhere. So let's create a source package I'll be right back So my project is inside my project folder. So let's do this Oh, I should have written If you want to do things right Okay, so we have a source package Actually, I should have sorry about this I should have removed the allier Director in it because it's not supposed to be part of the sources All right, so I will create my source package And then moving it to the index Again, you should your this specific part. You're not supposed to do it Uh, you just publish a source archive somewhere on the internet is just fine. But here we don't have internet With github it's released. All right. That's what I don't want to have to make typos All right, so back to my description so So it's a local file There I am. All right so now my My software is registered in in the index Let's try to actually use it and Really? Oh the maintainer should be an email. Okay Too much We will check before we add your Your format file in the index And yes something important. So I gave the source archive, but allier wants to wants you to put some Check some integrate so that So that when it downloads the source It so it needs to be sure that it's actually the source the exact source that was intended when the When the project was registered. It's a security security check. So we have to compute Sha 500 and 12 Some so let's do this for my source archive Where is it? Okay, so this is the check some It's very secure. Okay. So now I've added The some I'm so It's great. Allier. I know it's not this one Yeah, this one so I have the sources and I saw some some sources Now I should be able to build it But no no, I forgot an important step Which is telling allier that my my project depends on other projects So it's it's important so that allier actually when it gets my project It's also downloads a datum all the a datum all projects and the apdf one so actually It was wrong So let's fix it Let's fix this here So how do we declare dependencies? Well, it's simple. We say something like this Without typos And we say, okay, so the the release zero dot one of my project depends on so it's a datum all And we depend on So here we we depend on version one And this is the kind of special syntax to give constraints about Because generally you can depend on version Version one dot zero of a project But this is also supposed to work with version one dot one, etc You don't want to list every release possible. So there is a special DSL to express the dependencies I want coverage here And so apdf if I remember correctly, it's five dot zero dot zero. I'm not sure. Let's try Oh, but wait, I can ask allier No, so I'm a yeah show Apdf its version currently Okay, I can read it here, but Yeah, five. Oh, yes, great. So it's five not uh great Okay, so this is my new index now. Let's try again To get the project and build it I can use I don't remember if it's build or compile Okay, thanks And what's wrong? Could not use that Oh It's not it's not supposed that there is no I ah, yes, right. Adatum all is not it's not version zero It's not one dot zero. It's zero dot one. So about this Yeah, so it's uh Now the different now the dependencies have been currently set up and there is a able to properly set up the project and now Yes It worked we have all outputs at the pdf Okay, so Small as simple there are several good shares and we are running out details, but uh This is a quick that was a quick demo of how to contribute a project to the outer world You want to Yes So as you can see the process is a bit Tidious to to contribute and that's why uh, as Elorando said, that's one of the things we want to improve in 2020 make it make this process easier and quicker Uh, so to end the presentation, uh, I'm going to show you the The prototype or more or less proof of concept website that we have on so it's at ally or that adatum dev Uh, so this is the main page. It's actually a copy of the read me from the repository So you have instructions to get started out to compile ally or and how to start using it Uh, then you have two main pages. You have the crates, which is the list of crates available in the system And you also have a search Um, so if you if we look at the crates, so here you have, uh, all the The the the projects that are actually in ally are available today Uh, so we have the list here and then we are going to open one of them Uh, and so you have at the top you have some the actually the information that you saw a pierre marie Enter in the toml file. You can find it Here so we have the name we have the short description website, etc And then you can also put a long description with a markdown format to provide information to your users, etc So this one has no dependency, but the dependencies are also listed here and you can click to navigate the dependency You can also have tags to be able to search for other projects related to this one And so that's going to be the last one. Actually, it's it's when you click on a tag It's like searching in the search box and you can see you can Uh, see the the for instance here. I typed the game and I see all the game related, uh, crates available Um, and so when you contribute, uh, uh, a crate to the index, he will automatically every day regenerate the website to have your your crate available Uh, and so I think that's it for our presentation. Uh, we are really excited about ally here because Uh, we think it's a game changer for the data ecosystem and uh, hopefully We'll make it a lot easier for people to collaborate With data and so as Alejandro said now, we are, uh, in a open beta period So we expect a lot of feedback from From you all and of course new projects to put in the in the index Thank you Yes No, if you want to uh, sorry So if you want to uh, to check it out go to the uh, uh, to the ally your projects from the ally your project, uh Projects on github And so if you if you have issues you can open issues directly on github and uh, that was there Yeah, that's the that's the the right way to give feedback is to go to this repository and open issues and Or even pull requests if you want to contribute that's uh, that would be great Uh, yeah, thank you, Pierre-Marie. That was useful. Thank you. Do we have time for question? Yes So I I'm starting here Uh, right. So the question is are we using the default gpr file that come with each project? Uh, so yes, that's right. Uh We we try to not, um Have specific requirements Uh for ally in each project so in theory if you are already are using gpr build To compile your project. Uh, it should work. Uh in uh in ally as well An option for you to make some restriction near to impossible to overwrite some values that are defined inside the ppr file So for example, if the developer says this is a dynamic library, it will always be a dynamic library In some context, for example, you need a static library But you're right Okay, so the question is about uh configuration of the gpr build project for instance, you can have Variables to say that you want a static library or dynamic library Uh, the answer is that you have some ways to declare those Those variables in the toml files actually so you specify in in the in ally or you specify that this project has different options Uh, and and so they are visible from the from the ally or point of view Yes, so yeah, actually you can and and that's the way so in in the in your ally or toml file You actually declare what are the variables from your project file And then with ally or build you can specify them like you would do with gpr build so it's Yeah, so Okay, so i'm not sure Where are you going? So you just said if you if your dependency doesn't specify what you need Right, there's a problem Okay, okay, so so I think I think the answer is um I don't know but maybe we can talk after because it's a bit complex So there's also there's also going to be in my opinion, um A discussion between people contributing libraries and people Using them. So if you find a library in ally or that doesn't have what you need You should contact the maintainer and say hey, maybe you should have this and for the next release, etc, etc but uh, it's it's it's so far we are uh Let's say it's uh, we're not looking that much uh into the details on of how things are built And and so on and so forth and also yeah, we are relying on gpr build. So if there's uh limitation with gpr build We have to deal with them or less Yes At this point the reason is that I don't like tools that modify my files. So when I did this Files that ally generates are as complete as possible, but my files my project file is not modified We discussed sometimes about this we might Perhaps add some switch that you tell ally. Okay. Go ahead and modify my project file. I'm okay with that For example, but that's the actual reason right now Yeah, yeah, yeah, this happens. This happens So yeah, the one one something specific as well is that sometimes from one, uh ally or crate you will have uh several Uh gpr files and you don't necessarily want to use all of them So it's not it's not uh We are living in a in an ecosystem where there are already projects out there and uh, they do not Necessarily fit perfectly the the ally Scheme So there are there are things that are you know, a bit different from the the basic case that we show here, which is a One one project with one project file and And why is it to do? Yeah, that's a good suggestion Yeah, the question was that when you do the ally with It gets added to the Dependencies, but the project file is not modified. So it won't build out of the box So you have to manually add it to the gpr to your own project file and yes, uh The suggestion is to inform the user that the the dependency Dependency that you just added has all those project files available for use Cool No, sorry, there was a second question that was uh Tell me if I'm wrong Couldn't ally or read or an existing project file and guess what packages are Should be added as dependencies. So It could but it You don't have the version information in the gpr file So for instance, if your project file depends on the eight atom l library, which version should I layer We could add the heuristics and so on, but it's getting much more complex than the other So it's a it would it would sound nice as a feature and useful, but it's not uh clear how how it should work exactly Right Right the hints could be definitely useful and actually what you said about the you know telling the users There are these and that Project file available. Actually, we do have the list of project file in the tumult. It's available. So That's I think yeah, that's something that's definitely doable So I invite you actually to open an issue and and share your feedback Yeah, if you want to implement it, that's fine as well Yes Mentioning So the the question is about the Yeah, I get it. So the question is about the uh, maintainers and maintainers logins in the in the tumult file. Um So We said that it's it's to make sure that you are the owner of the the tumult file and that You're the only one who can change it Actually, what's happened? So we have we have a maintainer field with emails because we want To be able to contact you at some point We also have maintainers logins with the github logins and that's uh, actually for automated checks So when you Contribute to the alaya index you do a pull request and there's a check that you are allowed to modify this this file but actually If you want to transfer the the ownership you can modify the file to remove your name and put someone else Login and that's how you would transfer the the the ownership and So far we'll see in the future but so far everything is moderated. So we have we have a manual review So even if someone disappears we can decide to transfer the ownership at some point Uh, nothing is really, uh Set set in stone for the maintainers we can we can work around the things like that Yes Okay, so the question is do we plan to package adder drivers library which is a project for embedded development in aida The answer is yes, but the the real question is how because I actually I actually started there's already embedded crates Available drivers for the samd 51 microcontroller The problem right now is that the architecture of the adder drivers library project does not fit very well with with alaya because It's not modular enough So we have to find a good way to do it. But yes, absolutely It will be in alaya at some point Okay, I think that's it. Thank you. Thank you all