<div dir="ltr"><span style="font-size:12.8px">Hello,</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">My name is Lucas Moura and I am Google Summer of Code Student working for the Debian project. My summer project is related to AppRecommender, a Debian </span><span style="font-size:12.8px">package</span><span style="font-size:12.8px"> recommender system:</span><br style="font-size:12.8px"><br style="font-size:12.8px"><a href="https://github.com/TCC-AppRecommender/AppRecommender" target="_blank" style="font-size:12.8px">https://github.com/TCC-AppRecommender/AppRecommender</a><br><br><span style="font-size:12.8px">This application works by creating an user profile based on the user installed packages, this profile is basically the most significant terms on all user packages. With this profile built, AppRecommender uses Xapian to query for Debian packages and display the closest ones with the query.</span><br style="font-size:12.8px"><div style=""><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><span style="font-size:12.8px">Currently, this application can only be used via terminal access. However, my gsoc project is to change that, and allow AppRecommender to be integrated into graphical </span><span style="font-size:12.8px">package</span><span style="font-size:12.8px"> managers:</span><br><br><a href="https://wiki.debian.org/SummerOfCode2016/StudentApplications/LucasMoura" target="_blank" style="font-size:12.8px">https://wiki.debian.org/SummerOfCode2016/StudentApplications/LucasMoura</a></div><div style="font-size:12.8px"><br></div><div style=""><span style="font-size:12.8px">I have already discussed this approach in two different lists, one in PackageKit:</span><br><br><a href="https://lists.freedesktop.org/archives/packagekit/2016-April/026411.html" target="_blank" style="font-size:12.8px">https://lists.freedesktop.org/archives/packagekit/2016-April/026411.html</a><br><br><span style="font-size:12.8px">And on the distributions list:</span><br><br><span style="font-size:12.8px"><a href="https://lists.freedesktop.org/archives/distributions/2016-May/000723.html">https://lists.freedesktop.org/archives/distributions/2016-May/000723.html</a><br></span><br>But summing it all up, the idea would be to add a feature for AppStream that would allow it manage package recommendations. AppStream would be able to read the recommendations file, generated by a package recommender application, and make it available for other packages that make use of AppStream data.<br><br>I have thought about how to implement this feature and the XML that would define a package recommendation. The idea is that the XML file would like this:<br><br><div>​<?xml version="1.0" encoding="UTF-8"?></div><div>​<recommendation></div><div>​  <id>winpdb.desktop </id></div><div><br></div><div>​  <because></div><div>​    <id>ipython.desktop</id></div><div>    <id>pida.desktop</id></div><div>​  </because></div><div><br></div><div>​</recommendation><br><br>The "id" would represent the package being recommended and "because" tags would be used to</div><div>show which user packages were responsible for generating the given recommendation. But this is a optional field.<br><br>With that in mind, I have thought about implementing the feature similar to appstreamcli refresh-index function. The function would do the following steps:<br><br>* Verify if a recommendation file exists (thought about placing it on /usr/share/app-info/recommendation/)<br>* Verify if the file is a valid XML file</div><div>* Parse the XML files</div><div>* Create the recommendation cache with the recommendation components<br><br>However, I still don't know if the best approach for dealing with the recommendation is to have a separate xapian database for them or if just holding a variable containing the recommendations in memory would be enough.<br><br>But does this approach fits AppStream, making a function on appstreamcli to deal with recommendations files ? And if it does, should I create a separate file just to handle recommendations, or can add the new functions on the existing modules ? For example, to parse the recommendation XML, is it ok to add the function to the as-metadata.c file ?<br><br>Best regards,<br>Lucas Moura<br><br><br></div><div><br></div></div></div></div>