 Okay, so I suppose we could start. This is a book, so if you have any questions, ask, just interrupt me. And if you have suggestions, tell me and tell me your questions. Sometimes it's just like, you don't realize something that's really up to you. Just before I start talking about the library itself, I should note that it's renamed from the book front to the bed because, well, it's touched up as an alternative interface to act, but there has been a lot of new stuff since then, so the name is not appropriate anymore. Eric says I should introduce myself, so I'm Peter from IRCM, I know me as Manful. This is Enrico, you know him, and he will be helping me out. So if you probably haven't seen the library from the inside, if you did, you should not be scared of it anyway. The interface you will be using, if you use the library, should be pretty easy. Well, compared to the implementation itself. You shouldn't have to make anything about the implementation to successfully use it, and you will just use a configuration of the library. And we'll get to that later, what the configuration is, but basically it means that you get just ready classes to just use it and if you don't like C++, which people probably don't or the rest of them won't use it because it's heavy and they think this typeset did it in the way, you can use Dubai or Titan bitings, which are both right now, they are not complete, but they are getting there, and I think I have made a lot of progress during that point with that. So they actually can be used to write useful code. So about motivation, why? It's pretty good in the front, in the front. Well, if you need to add like each database, like you want to add stuff that's installed on the blind machine, you want to write something with that database. Or maybe if you want to write some sort of an interface on the server, it could be as well because it's not necessary to have that same hash that the app uses anymore, so that's abstracted, so you can use it once as well. Well, this could be, the first part could be done with link up to package library, but if you need some other stuff like that X or the desktop files, you will probably like the bit more, because you get directly what you need here. Right now there's BethTechSense and the app install data, that's a package with desktop files for each application, if you know desktop standard, it's the stuff that makes up the desktop menu, like no applications or PDK menu, and it has a package name for each application in the desktop file, and you can get some stuff from that like application install work, and maybe some other data, translations of the descriptions. Right now, I don't think you can do that right now with the translation project, that is the full translation project. In the future, you should be able to get hook on data, screen transfer maybe, change logs, that depends on the other approach that is about collecting metadata in the background, there was a lot about it some time ago, here, and you can use Rebet if you want to create packages that are installed in the system if you want to install, upgrade stuff, probably anything that you can do. Right now, there is packages, for each package you can get list of available versions, for each version you can get relations, dependencies, recommends, suggests, and stuff like that. You can get, for each package or version respectively, you can get most of the data that is available for it in the app. That is the name for the version, the name of maintainer, installation status, if it's upgradeable current system. I think I'm going to work on Rebet because there is something that looks like that. You can maintain the type of Rebet so what you can do is get the categories for a package, all the packages that have a specific category, get the related packages, packages that are similar to one another one, and I implement all the same operations with the packages that you think of. You can also access the packages from Capital League and take descriptions and long short descriptions for all of these. To the right you can see an example of the whole display that is basically one line, given a category, it looks about the Capital League as a category object, and there's all the packages within the category and put in their name if they are installed, or if they are not installed. If they are not installed. Are you being rude? You can basically watch everything in one name. Yes, but the nice thing is that, well, I don't know how to get that functionality which is external to the community, so it gets very difficult to make a script that shows all the API games that are installed in the system. And these sort of cute things can actually merge things together. That's very nice. That's it, it was very done in all of them, but the list of packages you can see here, I don't think they are installed. I don't really know the name of the toys. You, the toys are a game called Call Toys. It's all kind of exciting installed. You need to ask something. I can probably show an application of that. The display? Yes. The little things first. So this thing here is the pitch text on the slide. So I could use the list on the left to reflect the K&A structure. This is not an important as well, but it's a bit of a tricky thing, I think. This is a different library, and this whole app is using, it's using Libet. Well, all the versions of it right now because it's a bit broken. So with version, we just check it out and it changes and it is installed. For install packages, the other way around, you want to check it out. So that's one of the applications. So where does it get the data from? It's from desktop files. Where do you get the desktop files? Desktop files are, right now, there is no database for that. It's in Ubuntu, and you can use it from built-ins where you can change it to extract all the desktop files when building. I think Rafa Alcatrazok and some other people, who may include it, want to do something similar, but done with Mac before the end, to provide the metadata, not only desktop files, but other stuff as well, so it provides package and online to get the mechanism similar to the update. I hope it will be a reliable point soon. So now it's a package with the desktop files that you installed in your system? Yes, the Ubuntu package. You can download it from Ubuntu and just install it. It has no dependencies and it works for no cases. So play with that. Let's do this. We have to do things like upgrade or this upgrade on the cache. So you can compute the transaction and you then actually can download the package it requires to complete and do the commit. It uses the web package to do that, so like now. So the deep package interface is the same. It can do update, because right now this functionality in the app itself is done in the command line part of the utility, so if you write a front-end you will have to implement it and well, it won't because of that. That's it. You can do upgrade. The computer computation of the upgrades is done in the app-toid approach. Right now the interface is in the app. There is a new heavy thing for it, but right now it's a stripped-up aspect. I will eventually implement a different algorithm for that because maybe more of them. Right now there is one in aptitude that's not in the app package because I don't know. I think Daniel Burrows wanted to do that as a bounty, but it was not accepted or something, so it's not done yet and I don't know if he will do it. If he won't, I will do it in the app because I can re-configure the library and at compile time I can change the algorithm and probably add front-end as well but probably it doesn't make as much sense. One question before you. I have a little fear of this, maybe because I'm not following the closely explanation, but if you are implementing part of the functionality that is also existing in apt, don't you fear it may at some point diverge and have to implement the rules? Yes, there are two. Well, it's incompatible as... What do you mean? For example, if you add some capabilities to one of the... Of course, this may extend what apt currently does, but if in the process of extending it there's some behavior change, well, it may affect the users because some users are still using d-select or aptitude or... Yes. ...conline or whatever. Well, you get the same thing with apt, it's having functionality and it doesn't seem to be a real problem. If you have reasonable network compatibility which I will have, because I want to have it but once I have it really well, I can see there will be a problem. The code base, there is not a problem with code base because that might diverge a lot. There are probably already quite some parts that are already done from the apt package, but... Well, there is... I thought that it's the same criteria for you not to break an apt or not to break the user's experience between one side and the other. Yes. I don't know how to do that. Because I will be hurting myself because... Okay. It was still a very sensational system from the apt. Yes. Yes, but maybe as for example we changed the recommended tool to use the interface for the packages from this select to apt. Well, at some point in the future it may change to something based on apt. So, I think it's important to keep this focus. Yes. But it is important. I don't recognize that because there are just... Well, depending on apt, if you are open on the app, you may just... um... to describe the stuff. All these filters are implemented with apt. It doesn't quite hit the screen, but... there are some algorithms... that we can... This interface makes me think of a possible addition to a user tool that would maybe mimic some of Jentu's use flags. Yes, I may say I don't want anything that's related to GNOME in my system. So, it would be nice for a package manager to be able to configure it. You don't want anything with GNOME. Not only for a search, but for... Yeah. Looks interesting. I don't know if Jentu uses flags, but it simply is to do a user profile saying I'm not interested in... Well, it's not for user profiles. It's for... I understand that it's for compiling applications. So, you state in your use configuration whatever it is, that, for example, you want everything to be compiled with certain optimization. Or, in this case, to use if available, or not use if available, not to request certain libraries, certain compiles. Yeah, but for example, if you want to... Because, for example, if you want a system that's without big component... You can currently do this. Yeah. This list is all installed or available packages that are in GNOME and they can just see this. You say you request them all and you can add changes. You can do that by... you can do... because I've solved them... All of them. Yeah. Okay. I wanted to show the... how the filters are made. Yeah. Here, it's really unbelievable, but I'm not sure if it really works. I don't know if it's going to work. Sometimes, it's just remodeling. It's like, really changes. And this view is, of course, the same as previously, but with different filter. And the filter is here. It's not marked here. Or if it's broken, broken packages or packages that build it. So, basically everything within a changes is filtered in and it's done with, like, this simple C++ dispersion. So... It should not need to worry. It's fairly adequate, actually. This is still the Julian expression as it was passed that the writer does all the combinations of filter in each other. Oh, yes. So... I replaced probably the point with my notes, but it did not fit with some of these managed and collapsed ones. So... Okay, there are some other features in the library, which are... For now, for the end, it's not an essential one, but the... I mentioned the library is configurable, so the point of that is you should probably be able to add a bunch of RPM components and use the same library, the same software on RPM systems. Or you should be able to, for example, grab DevTags for platforms that have no actual DevTags data, where it's sort of useless to do all this stuff. And... Well, it does not really do it to DevTags, but there are benefits to it, anyway, because getting the same applications to other platforms that originate on Debian is probably a good thing. So, you can say, see this Debian thing, it came from Debian and it's really cool. You may want to try the full one on Debian, because it's sort of critical to learn on DevTags. It's quite interesting because the libraries are a big collection of templates and it uses a generic program a lot. And so you have you don't, you have the package archive component doesn't particularly know what is the exact type of package and the DevTags component doesn't know what is the exact time of the package archive of the package or and so on. And so, and there's a file which puts things together and says use that as a package, and the compiler brings everything together. So if you want to do RTM you just do it, just say use RTM, it's another package. And you get three of them if they have RTM and if, because right now Synaptical is like written with that. Okay, if there are some use pages for the library you have seen that I'm not sure if anyone wants to show something with that code. I guess people have seen if you had a look at my DevTags talk, that's the DevTags component that's a bit of a problem with that flow. Yeah, as well. I'm basically in the past I had a little DevTags library and now I'm just doing development inside of the DevTags because to have any DevTags library I need to access packages anyway so you just there is another package using that the third party one mostly because these other icons are made by the two of us so that's not really an indicator of usefulness of the API because like we know it very well but there is Benjamin has been using for some time now in his package and I think it was quite really important to have because having someone different to use the API gives it a good test and tells you a lot what's the problem with it and the prefactoring in all four versions of feedback is quite based on feedback from Benjamin Okay, so there are some other things that maybe in the future everyone has been mentioning that maybe the next DevTags will be in the future Yeah, I want to only one because I'm saying that there isn't much data so my intention is actually to use the DevTags for all database and tag archive set of command line tools like update, application and stuff like that are using the DevTags because first DevTag again gives some testing library and it should make possible things that are not currently possible with update because that's not in the back because the back is changing quite relatively and we can't expect people to adopt a completely changing code base and we are a lot on unit testing and we don't have so much real world coverage yet so that's understandable and I want to develop alternative interface that would go along with ADAPT and it should make available the features of the library that I need to collaborate with There should be a lot more of ADAPT work specifically there will probably be some redoing of the package manager with the ADAPT interface because there are some limitations I'm running with the back of the page and I would like to address that I don't think there will be deep deep page so I suppose that will serious the command line but I suppose that another thing is that right now update like the text data or other data that was the the biggest part and since there is no unified way to do update because it's re-intermented basically everything that does it there is no way to call a post update to regenerate the prefix index for example and that sucks very hard so we have to I have to create this little demon which watches changes in the actor index and rebuild the rest of the indexes we need which sucks even harder but at least makes things possible at least makes it possible for me to have a last update that I could use and causes with the actor index at the level of internal package reviews and microphone knows the problem so hopefully we'll get to live to actually create some updates database update field function in debug to be creating with which can call hooks but they're not there yet so there is such a deal it's called update index so if you see it you'll talk about it if someone here will want to use the app it will be fine if you want to contribute of course you are welcome because there are never enough contributors however it's not as easy to contribute as we use it because the library internals right now they are not that documented they are usually unit tests you can sort of use to get it written on the code there is little written documentation because we try to write that it gets out of sync really really quickly and it usually not everything in the library but often you will need quite some C++ knowledge so the plan is there are some things that external new contributors may want to do like adding the data source like implement data source for example that should not be as hard as working on the internals and that should be documented I think and I will look at that at some point for the library itself it's quite hard current development branch is this one it's an SVM there is a mining list on Alibar you can mine I think or at least if you have some remounts or questions what in this channel or maybe if you ask in the beyond level or something like that I have piloted so I will look at this I think that's about it I want to show some examples there are 5 ingredients so I will talk about that this program this program just lists the database and I don't know it just shows how to apply an outcast show but for a particular system it's like an outcast data wave yes but it also does it shows all the information that you have to know about so eventually if we are the popcorn then we are the popcorn and the unit it's not present in the package yes yes you can see this is the library initialization in the case of the particular image plans and the particular request that's called the staff meter system read write I think it's called update that works and upgrading to the library everything if something breaks there are exceptions so it's not handled here but it's handled here a great question well to have it up a summary of what happens we can't play with rebar package because it's too much of a base thing to actually shake it if you start messing with rebar package you have very little freedom to consider exploiting half of the data system so luckily we can create a new playground where it's better than the new features and the library is very complete and we can do everything with how the package does with a nice cohere at ATI which is also modular in a way that it can be adapted to different systems and it allows to plug in basically any sort of computer sources it's been done with that it's straightforward with popcorn which is one of my seven things in the library I'd like to have packages online the package is coming out of the west which is very useful together with that base data it's like show me all arcade games that I don't have installed show me the most popular games that's like makes a really nice tool for people wanting to play and yeah and from now on it's like either library factorings which seems to be very timely in the last years but at least we are reading lots of lines of code for a very factoring process and interface become really, really straightforward so far it's been a really good thing and then it's like other functionalities that we haven't seen in that year and that I find it quite exciting class bindings with the library to factory we started to have bindings without using some impossible version of sweep which exists only in the brain of the sweep making upstream Filippo and Filippo Truccheria have been giving about big metadata storage archives for that in packages which has all expert information that is not in the it's not in the packages file like screenshots, desktop files build leaf alers user rankings user reviews change works and the nice thing is that that could be complemented with functionality and platform actually accessible which is not an exciting thing but it's an application level interface to whatever people come up with that's the summary question oh and the KDE package manager and the the equivalent of Ubuntu after install for Dabian