<div dir="auto">This seems awesome.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 12, 2020, 6:36 PM <<a href="mailto:sugar@radii.dev">sugar@radii.dev</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>
<div><h1 id="m_-2325539499389675164unified-app-store">Unified App Store<br></h1><p>Once the app store is built with all the specified requirements, we
can with minimal effort turn it into the unified app store for all activities including python 2 (though all would be ported to python 3), JavaScript and those (if any) written in other languages. Based on
user-agent we can decide:<br></p><ul><li>Sugar OS - all activities including JS written for Sugar and Sugarizer<br></li><li>Old Sugar OS - python 2 activities (was there any support to run JS written activities?)<br></li><li>All other - Sugarizer activities unless toggled to show all<br></li></ul><p>This combined with building native app store (again with minor
modification to web app store) which is geared only towards students for
searching, browsing, installing and uninstalling apps would provide
single app store codebase for entire platform.<br></p><p>Please provide your comments on the idea. If idea is supported by the community than I can work towards building it.<br></p><p>Regards,<br>
Manish<br></p><div><br></div></div><div><br></div><div>Apr 12, 2020, 01:18 by <a href="mailto:sugar@radii.dev" target="_blank" rel="noreferrer">sugar@radii.dev</a>:<br></div><blockquote style="border-left:1px solid #93a3b8;padding-left:10px;margin-left:5px"><div><p>Hello everyone,<br></p><p>I wish to build <a rel="noopener noreferrer noreferrer" href="https://github.com/sugarlabs/GSoC/blob/master/Ideas-2020.md#sugar-app-store-for-python-3-activities-aslov4" target="_blank">app store for python 3 activities</a>. For this I would like to inquire exact requirements of the project from the mentors and community at large.<br></p><p>Below is my current understanding of project. Please read through it
and correct where these are wrong. After it are some questions to answer
to further improve my understanding. Some of these are merely more
elaborate rewording of requirements specified on <a rel="noopener noreferrer noreferrer" href="https://github.com/sugarlabs/GSoC/blob/master/Ideas-2020.md#sugar-app-store-for-python-3-activities-aslov4" target="_blank">website</a>. It is meant to detect possible misunderstanding that I may have from reading very brief one-line requirements.<br></p><p>After few responses for this mail, a draft requirements document will
be mailed for feedback before final requirements specification.<br></p><h1 id="m_-2325539499389675164objective">Objective<br></h1><ul><li>The objective of app store is to provide a one-stop platform for
students to browse or search and download activities to their system. It
is expected than once the app store is built, students would not have
to search for activities over internet, on GitHub or on wiki and download
from there.<br></li><li>Sugar will use app store to automatically upgrade newer version of activities.<br></li></ul><h1 id="m_-2325539499389675164users-of-app-store">Users of app store<br></h1><ul><li><b>Students</b>: search and browse app store for activities and download them if not already installed.<br></li><li><b>Trusted developers</b>: add and modify activities to
app store via SSH and than check them on app store. These are trusted
developers and not all the developers. Their role would be similar to
package managers for distros. That is, most of the times, the developer
who built activity would not be the one who uploads it but request
trusted developer to grant access or upload themselve.<br></li><li><b>Sugar desktop environment/OS</b>: check for current version on app store and if new version found than download and upgrade activities on local machine.<br></li></ul><h1 id="m_-2325539499389675164user-interface">User-interface<br></h1><ul><li>The user interface/frontend of app store would be catering to
students primarily and therefore must be built keeping them in mind
rather than developers. But developers would still use it (or not?),
therefore there would be some consideration of them and providing
information relevant to them such as version of app, size,
detailed/complete release note, website/link to repository, license etc.<br></li><li>Special attention needs to be made towards user experience and
usability. Such as web app should be responsive, delightful to use by
students. For this, some artwork also needs to be built such as logo of
app store, button icons, background etc.<br></li></ul><h1 id="m_-2325539499389675164functionalities">Functionalities<br></h1><ul><li><b>Upload activities to app store using SSH</b>: Trusted
developers with access granted/account created for this specific purpose
can upload activities to app store and have parameters to specify such
as markdown supported detailed description of activities etc. but
information which is available in <a href="http://activity.info" target="_blank" rel="noreferrer">activity.info</a> will not be asked/cannot
be specified in parameters while uploading, instead it will be processed directly by parsing <a href="http://activity.info" target="_blank" rel="noreferrer">activity.info</a> file.<br></li><li><b>Search box</b>: There will be a single search input
field in which user enters search query. Thee are no complicated search
query features such as selecting category, no. of entries per page etc.
At backend, based on query keywords either a) a simple keyword match is
performed and results are returned in order in which received. b) some
search improvement processing is done such as a rank based search prioritizing keyword matches in activities tile over activities
description. There will/will not (please inform) functionality to sort
search results based on activities last updated or added, no. of
downloads etc.<br></li><li><b>Redirect older Sugar to <a rel="noopener noreferrer noreferrer" href="https://activities.sugarlabs.org/en-US/sugar/" target="_blank">python 2 app store</a></b>:
Redirect only Fedora 18 or earlier version based Suger 0.112 or earlier
version to <a rel="noopener noreferrer noreferrer" href="https://activities.sugarlabs.org/" target="_blank">activities.sugarlabs.org</a>. Suger 0.112 or earlier desktop
environment is not running on any other distribution other than Fedora
18 or earlier or not needed to be checked for.<br></li><li><b>List activities</b>: There will be a category in browse
section of app store named “All activities”, using it user can browse
through all activities and not just in some specific activity.<br></li><li><b>Support for Sugar’s microformat software upgrade feature</b>:
Embed CSS selectors and HTML data on activity bundles page and activity bundle list page, to allow microformats based Sugar software
upgrade feature to check and automatically update activities when new
version available on app store. Should there be a page listing all
activity bundles where Sugar software upgrade feature will check for
updates or should I follow the same tree structure as <a rel="noopener noreferrer noreferrer" href="http://wiki.laptop.org/go/Activities/" target="_blank">on wiki</a> or should there be a way to let know Sugar of dedicated page of each
activity bundle to check for update (but modification to <a href="http://activity.info" target="_blank" rel="noreferrer">activity.info</a>
is not allowed)?<br></li><li><div><b>Content-Type</b>: When user downloading activity bundle
from app store, server sends Content-Type header in response with the content-type of sugar activities that is: <br></div><ul><li>application/vnd.olpc-sugar for Sugar activity bundle (extension .xo)<br></li><li>application/vnd.olpc-content for Sugar content bundle (extension .xol).<br></li><li>application/vnd.olpc-journal-entry for Sugar Journal entry bundle (extension .xoj)<br></li><li>application/vnd.olpc-journal-backup for Sugar Journal backup files (extension .xob)<br></li></ul></li></ul><p>There would not be any other file than .xo but better to have
information for all file types used by Sugar in app store software.<br></p><ul><li><b>Automatically update activities from activities repository specified in <a href="http://activity.info" target="_blank" rel="noreferrer">activity.info</a> file</b>:
A standard recipe/script is to be made for server/app store to
periodically check for newer release under ‘releases’ section of activities hosted on GitHub and automatically create its bundle and add
it to the app store. However, it will not be done for all activities
which specify its website/repository as GitHub repository but only for
those which are whitelisted by website admin/trusted developers as
trusted repositories for security reasons and all GitHub repositories
starting with <a rel="noopener noreferrer noreferrer" href="https://github.com/sugarlabs/" target="_blank">https://github.com/sugarlabs/</a> i.e. hosted by Sugar labs organization.<br></li><li><b>Inform if activity is already installed</b>: Wherever
on app store, there will be download buttons for activities, A check will
be performed if activity bundles are already installed on system. If so,
than download button colour will be changed and “already installed”
will be displayed below it. But, user can still download it. This need
to be accomplished without modifying activities and should work for all activities available on app store. So, options which rely on modifying
app itself are out of option but Sugar can be modified to support this
functionality such supporting something similar to
getInstalledRelatedApps() in Android.<br></li><li><b>Download count</b>: Every activity bundle should
display no. of times it is downloaded. It should include download count
of all previous version as well.<br></li></ul><h1 id="m_-2325539499389675164development">Development<br></h1><ul><li>Use general database such as MySQL/MariaDB for storing all textual
data such as app title, description, author name etc. and use their
in-built search functionality to perform search (after sanitizing
input).<br></li><li>The website will not be using JavaScript to make requests and update page dynamically.<br></li></ul><h1 id="m_-2325539499389675164constraints">Constraints<br></h1><ul><li>Activities itself won’t be modified including their metadata file
located at activity/<a href="http://activity.info" target="_blank" rel="noreferrer">activity.info</a> in their source tree for supporting
any of the required feature. Request for modifying metadata should not
be made such as for adding detailed description and instead should be fetched from their repository or options should be provided for
specifying description while uploading activity bundle via SSH.<br></li></ul><h1 id="m_-2325539499389675164security">Security<br></h1><ul><li>Only developers which have been provided access in advance can
upload activities to app store. Some may have admin access, so they can
add other developers as well. A simple CLI script should be provided to
easily add new developers and their access level as ‘can upload new
activities’, ‘can modify specified activity’ and admin access.<br></li></ul><h1 id="m_-2325539499389675164additional-questions">Additional Questions<br></h1><ol><li>Developer uploading activities via SSH? Will access to uploading activities be with few trusted developers (my assumption as of now) or
anyone can upload activities to app store once approved.<br></li><li>Future considerations: how far is the app store expected to grow in
future in terms of its scope and functionalities. What considerations
should be kept in mind if app store functionalities and codebase is
expected to be a lot bigger in future.<br></li><li>Is programming language to be used for backend is per-decided to be
Python or can be JavaScript as well? I am comfortable with using any of the
two. My suggested framework for Python is Flask and if JavaScript is
used than Express.js. I also suggest using MySQL database similar to <a rel="noopener noreferrer noreferrer" href="https://github.com/sugarlabs/aslo" target="_blank">aslo</a> for backend
for storing and looking up activities metadata but store activities
bundles as normal files on disk. Is their any reverse proxy used on
server where it will be installed such as Nginx or Apache?<br></li></ol><p>Please give your comments on these questions.<br></p><p><br></p><div>Regards,<br></div><div>Manish<br></div><p><br></p><div><br></div></div><div><br></div></blockquote><div><br></div> </div>
_______________________________________________<br>
Sugar-devel mailing list<br>
<a href="mailto:Sugar-devel@lists.sugarlabs.org" target="_blank" rel="noreferrer">Sugar-devel@lists.sugarlabs.org</a><br>
<a href="http://lists.sugarlabs.org/listinfo/sugar-devel" rel="noreferrer noreferrer" target="_blank">http://lists.sugarlabs.org/listinfo/sugar-devel</a><br>
</blockquote></div>