 I forget to turn it. Oh, it's better. Okay. Sorry again. So how many people know what package is in FreeBSDs? Okay. Excellent. So for the others, Pecture is a tool, is a new package management tool into FreeBSD, who helps you to install binary packages into the system, solve all the problems you have with dependencies. So package basically is a binary tool, but you can extend it through plugins to access the database to run special commands after some actions. You can put hooks on it, so you can do extra stuff after a command. Maybe even you can replace a command and write something different you want to do with packages. So it's very flexible, so you can write whatever you want and do your custom things for your production servers or for whom. So that's basically what I did. So package provided is a plugin to find which package you must install if you want to have a defined binary or a tool you want to use. So it's something like YUM provides, so maybe some of you know what YUM provides. So the plugin comes into the FreeBSD ports very recently. I committed it at the end of January, so actually it's not in people using the quarterly package. I have access to those tools, but the ones who use the latest package can have access to it, so I think it takes a few weeks before the tool will be available for everyone. So this is an example of the command line, so you just have package is the name of the tool, then provides is the command, you want to provide something, and the name of the file you're looking for. And the second command is to update the package provides database, so we use a specific database with difference from package. We need to recompute all the package information to have all the files you can have into the FreeBSD packages. This is a schema explaining how these information I got, so we used the package info coming from the official FreeBSD package repositories. I have some rubbish grids running on my server, so computing all the information and provide some large raw text files with all the files we can have for packages and the corresponding package. So here's an example if you want to search for VIM because in FreeBSD by default you have VI, not VIM. You can type this schema and look exactly which package will provide the tool. In FreeBSD we have two, we have VIM and VIM Lite, who is the very smallest package, so maybe you will be interested to know whose package provides a specific file. So you can also use regular expression in the search. It's used per compatible regular expression, so you are basically able to search for whatever you want. Of course you're not limited to the binaries, you can also search for including files for C or C++, for modules, libraries, so sometimes when you're writing a tool or you're compiling something not coming from the operating system you're using, sometimes you have problems with dependencies and you don't know exactly which dependency is missing. So this tool can help you solve this kind of problem. This is another example, this is the output we got after you typed the command for VIM. As you see we can have two different VIM packages and also we have the repo because in package tool you can have multiple repositories, so it's a good way to know exactly where this package comes from. I think I did it faster, so I have plenty of questions after that. This is something about the future, things I want to implement, I want to improve first the way I store information because actually I'm using a raw text file and regular expression to search on it, so it's not that slow but it's a little bit slow, so improve the speed, it's also a good thing and maybe making the services the way I've served the files more secure using HTTPS and maybe sign in files. Actually there's no security at all. This is all the things we can think about is why not making this feature official and have the database file directly accessible from the FreeBSD builder once he builds the package. So you have an official database for the provides file, so it could be better. Another thing is we can also think about building other tools using this database. I have some examples I can show you after. Yes, demo time. Can I move? Yeah. So everyone can see it's bigger enough. Okay, let's try the Vim search so you can see this is a very slow laptop so don't expect it to come so fast. I show you the Vim query. So yeah, next time. Yes, as you can see you can have all the information including you see on the top you have all the other packages coming with Vim stuff. Sometimes you have ZSH files for completion and so on. So it's easy to know exactly what's going on. And when I was talking about other tools I do a very simple ZSH script. So let's as an example I think I want to run GIMP and don't have GIMP into my computer. So but I think maybe I am so I type GIMP. Of course it takes time to answer. Sorry for the delay. And yes, you can have this kind of information. Since ZSH doesn't found the file you want to command you want to run. He calls package and package provide and found exactly the package you want to install. That's can be that could be one of the funny features we can come with using the provide database. This is my official post. You can see we have a package provide database for basically all the architectures in FreeBSD mostly. At least for the one who support. So there's no limitation for depending on the version. And basically if you're not using FreeBSD I know a little bit and I know there's other operating system who use package. So this tool can be also used in other system using package. There's no limit. So maybe yes, if you have questions, yes. So the question is how do I deal with P list because basically in FreeBSD packages in source we have PLS for each port except for those who has a automatic PLS and the PLS is generated during the build. So there's no way to know exactly which files will come. So basically I have a discussion with, I don't remember the name, sorry, the man who runs the fresh ports because fresh port comes with something like this feature but he uses the source, the ports three. I'm not using the ports three. I use directly the packages. I extract because it's very funny because packages come in with two main files. The first is a description of what this package has, a list of files, et cetera, dependencies and so on. Then another file with the information with the real files. So you can download only the first bytes of the package and extract the first part of the file. So you don't need to download all the packages and it's pretty fast and efficient. So I don't need to take all the time from the package servers. Yes, that's the way I'm working with to build the database. Another question. Okay, I think we are... And thank you very much for the talk. You're welcome. Thank you.