[GCompris-devel] GCompris Architecture Reconfig Discussion

Devendra Vyas devendra.y12 at lnmiit.ac.in
Thu Mar 24 13:47:38 UTC 2016


Hi
Thanks for putting in your thoughts!

On Thu, Mar 24, 2016 at 3:33 PM, Holger Kaelberer <hk at elberer.de> wrote:

> Hi,
>
> I'm currently on holidays with limited inet access :-( therefore replying
> late:
>
> On 23.03.2016 12:22, Johnny Jazeix wrote:
>
>>
>>
>> 2016-03-23 11:36 GMT+01:00 Devendra Vyas <devendra.y12 at lnmiit.ac.in
>> <mailto:devendra.y12 at lnmiit.ac.in>>:
>>
>>     Hi
>>
>>     On Wed, Mar 23, 2016 at 3:01 PM, Johnny Jazeix <jazeix at gmail.com
>> <mailto:jazeix at gmail.com>> wrote:
>>
>>         Hi,
>>
>>         2016-03-22 23:14 GMT+01:00 Bruno Coudoin <
>> bruno.coudoin at gcompris.net
>>         <mailto:bruno.coudoin at gcompris.net>>:
>>
>>
>>
>>             Le 22/03/2016 15:27, Devendra Vyas a écrit :
>>
>>>             Hi
>>>             Thanks for the prompt response!
>>>
>>>             On Tue, Mar 22, 2016 at 6:27 PM, Johnny Jazeix <
>>> jazeix at gmail.com
>>>             <mailto:jazeix at gmail.com>> wrote:
>>>
>>>                 Hi,
>>>
>>>                 2016-03-22 13:10 GMT+01:00 Devendra Vyas
>>>                 <<mailto:devendra.y12 at lnmiit.ac.in>
>>> devendra.y12 at lnmiit.ac.in
>>>                 <mailto:devendra.y12 at lnmiit.ac.in>>:
>>>
>>>                     Hi
>>>
>>>                     This mail comprises of what I've understood after
>>> the discussions on mailing
>>>                     lists and IRC regarding modifying the core of
>>> Gcompris.
>>>
>>>                     Purpose: To provide users an option to download
>>> activities as per their
>>>                     wish/need. Keeping the full download option intact.
>>>
>>>                     Phases of development:
>>>                     P-1 -> Separate ActivityInfo.qml and icons from some
>>> activities and make new
>>>                     ActivityInfo.rcc. See whether we are successfully
>>> able to load them. The
>>>                     activities selected here will not have have any
>>> inter-dependencies on some
>>>                     other activity.
>>>
>>>                     P-2 -> Now for the activities that are
>>> inter-dependent, I think we'll have to
>>>                     code a new download manger in a way that it
>>> downloads all dependencies
>>>                     required for running that activity and nothing
>>> extra. As mentioned earlier by
>>>                     Johnny, erase_2clic needs erase. So download
>>> manager's code will manage
>>>                     accordingly.
>>>
>>>
>>>                 I'm not sure we need to update the DownloadManager in
>>> this case, we can just first
>>>                 download the dependencies and then the wanted package. I
>>> think there is a system
>>>                 with a job list that should work here?
>>>
>>>>>>             If it's available already then, we could incorporate it.​
>>>
>>
> DM does not yet know anything about dependencies between downloadable
> resources. Can be added. Either there or in a separate module, like
> "ActivityManager" or so.
>
> One could also think about factoring code that is common to multiple
> activities out to some kind of "activity supporting lib" that is
> semantically located somewhere between core and activitites. That would
> allow to really only install the one activity a user wants to install
> instead of pulling in others it depends upon. Not sure if this would be
> worth it. Thinking about the lang/words function that is used in quite some
> activities already this would probably be worth it. Whereas for others like
> "click_on_letter"/"click_on_letter_up" this might seem too much overhead.

​
I think if once we are able to do it without the factoring, I would really
like to go for the factoring. I even thought of it while discussing it with
Sagar earlier. ​


>
>
>
>>>                     P-3 -> Now providing option of selective activity
>>> download to end-user in a
>>>                     way that it is easy to understand. I suggest that we
>>> have two buttons at the
>>>                     very beginning of the app, that prompts user with
>>> two options/buttons: a) Full
>>>                     Download b) Selective download
>>>
>>>
>>>                 There are two things to consider: the first run where
>>> your solution works (should
>>>                 it depend on the platform? I mean for Desktop packages,
>>> do we propose all the
>>>                 activities directly? We also need to take care of not
>>> propose it if the user is
>>>                 not connected to internet, it should work offline).
>>>
>>>>>>             First phase could be do it for android users only, as
>>> desktop users don't usually face
>>>             space problems. However, once tested for android, we could
>>> discuss about it's
>>>             implementation for desktop users as well. Does the approach
>>> feel right?
>>>
>>             Well, the code is platform agnostic. It is just our decision
>> to provide a given version
>>             with a download mode for a given platform.
>>
>
> ACK, once the feature is in place it is supposed to work on any platform.
>
> For desktop platforms I guess the 'normal' use-case would be that GCompris
> is installed with activitites as packaged for the distro. Irrespective of
> that the download code can check for updates of activities upstream and
> install them if requested by the user.
>
> As for voices we'd probably need several activity-rcc-directories to check
> for available activities to load as the download target directory will be
> different from the system-dir where packaged activity rcc files will be
> placed during install. The activity loader should then be smart enough to
> always load the newest available activity compatible with the current core
> version, for cases where we have different versions of an activity
> available.
>
>
>
>             We could provide the option of download, but if the user is
>>> offline, it would check
>>>             and notify the user through a Dialog/Alert Box that the
>>> device is not connected to the
>>>             internet. ​
>>>
>>             Sure.
>>
>>
>>         I don't like the idea of telling the user he is offline. I,
>> personally, always use my tablet
>>         offline and would not like to be reminded that I'm not connected.
>> Maybe I'm a rare case :).
>>         There is an option "automatic download", if it is checked, for
>> me, there should be no box.
>>
>>>>     True, if the automatic download is checked then we may avoid the
>> alert/dialog box. However, if
>>     it is not checked and still user tries to download an activity and
>> he/she is not connected to
>>     internet, I think in that case we should show alert/dialog box​
>>
>>                 Then, there should be the possibility to
>>> install/update/uninstall any activity
>>>                 when you want using the configuration panel.
>>>
>>>              Sure, I've mentioned that in P-5 as an optional component,
>>> but now I think it could
>>>             be added to the main To-Do list :)​
>>>
>>             I would like to avoid a such configuration panel. This
>> feature belongs to the admin
>>             mode. Let's not give the option to uninstall specific
>> activities.
>>
>>
>>         Is it a good idea to separate the install/uninstall features? For
>> me, it comes together.
>>
>>>>     As Bruno said, we would like to avoid as of now. However, if we find
>> an opportunity after
>>     implementing and testing the rest features and all agree to it, then
>> could we think of something
>>     like a long press that enables​ a cross/delete button in the top
>> right corner of every activity
>>     icon, that would uninstall that activity?
>>
>>
>> My point is more that installation and uninstallation should be together.
>> So if we decide that
>> uninstall is more admin, I would think that it should be the same for the
>> installation. I don't see
>> why we could install activities as "simple user" and need to be in admin
>> mode to uninstall them.
>>
>>                 For the selective download, do you have an idea of what
>>> it should look like, which
>>>                 information should be displayed? The icon, name,
>>> difficulty, tags, version? Can we
>>>                 reuse the existing menu to display these activities (and
>>> instead of flagging
>>>                 favorite, we can flag "already downloaded/can be
>>> upgraded") or maybe use a list?
>>>
>>>>>>             One way that I could think of is, the icons of the
>>> activities that are downloaded will
>>>             be in color and those not on device will be in grayscale.
>>>
>>
>>
>>         I don't know much the domain, but can using grayscale be a
>> problem for some people with
>>         visual deficiencies? In a way it's the same as using colored icon
>> but I'm not sure, so I
>>         prefer ask.
>>
>>>>     One way of doing it could be that apart from grayscaling the icon we
>> could also shade it with
>>     diagonal lines (stripes). Or if not lines then may be showing a
>> download button on the icon
>>     itself or just below it. Also, we could better visualize it via
>> actually implementing it and
>>     based on different opinions and results, finalize one. Suggestions
>> welcomed :)
>>
>>             By doing this, we could use the existing menu. Also, if we do
>>> this, the already
>>>             downloaded flag won't be needed. Now there could be multiple
>>> ways to display "can be
>>>             upgraded" flag or info, one of them could be to have a
>>> separate configuration screen
>>>             where every downloaded activity is listed and there the user
>>> could be notified of
>>>             upgrades via some some button. The button would be active
>>> only when there is an
>>>             upgrade possible.
>>>
>>             Ok
>>
>>>
>>>                     P-4 -> Versioning of APIs. I'm a little unsure here.
>>> We have two issues to
>>>                     handle here: a) Avoid download of duplicate activity
>>> on the user end b) check
>>>                     and update correct version of activity to core. I
>>> think one of the ways could
>>>                     be, while we are creating a separate
>>> activityInfo.rcc for every activity, the
>>>                     download manger could check the corresponding
>>> ActivityInfo.qml file in
>>>                     activityInfo.rcc for version and then perform the
>>> necessary action.
>>>
>>>
>>>                 To avoid duplicate, you should already know if you have
>>> the activity or not, and
>>>                 its version. I think we can only have one
>>> downloadable_activities.rcc on server
>>>                 containing:
>>>                 |- activity1/{icon/ActivityInfo.qml}
>>>                 |- activity2/{icon/ActivityInfo.qml}
>>>                 |- activity3/{icon/ActivityInfo.qml} ...
>>>
>>>                 This file would be downloaded, if automatic download is
>>> activated, when the user
>>>                 starts the application if the version is more recent
>>> else with a button in the
>>>                 config, like for the voices. Then, we can see for each
>>> activity if we have a more
>>>                 recent one or not.
>>>
>>>                 For knowing the minimum/maximum core version, we can
>>> probably add it in the
>>>                 ActivityInfo.qml. We have a createdInVersion field,
>>> maybe we can improve it.
>>>
>>>             ​I'm a little unsure here. May be we could discuss this
>>> further as Sagar suggested.​
>>>
>>             Yes, we can just decide not to manage versioning more than
>> refusing to install a new
>>             activity on a previous core. This is a safe bet and a good
>> start.
>>
>>             Bruno.
>>
>>
>>         Sure, we have time to think of it and we should take this time to
>> find the best solution :).
>>
>
> Regarding versioning:
>
> Good idea to maintain everything needed for activity compatibility within
> ActivityInfo.qml
>
> For checking whether an activity is compatible with a core/app we need a
> new coreApiVersion defined in the core/app, right? That version would be
> different from the applications version and would be increased whenver we
> add a new core function (used by an activity) or drop an older one (if we
> ever do that). Or is there an easier way to track API compatibility?
>
> On the activity side we might need at least something like minCoreVersion.
>
> Also maxCoreVersion might be needed unless we can ensure to always change
> the core in a backward compatible way. Otherwise we might end up in runtime
> errors in case an 'old' activity is loaded by a 'new' core that does no
> longer provide the API interface the 'old' activity needs. Consider the
> case that the user updated the gcompris app(lication) and the new core does
> no longer support the downloaded activities. The option to keep backward
> compatibility is quite a restriction but also more convenient to code.
>

​I might be wrong, but I would like to think of maxCoreVersion

​as a sort of safety net for future development prospects. As in if there
arise a case where in an activity cannot be rendered by the newest core
version due to some major changes, thus lose of backward compatibility,
​then we might be able to inform the user in a lucid fashion.

I also would like to know am I supposed to incorporate these points in the
proposal or should I leave them as of now to further discussions?
Holger, I know you are running low on internet connectivity. Still if you
could find some time to review the proposal, it would be really great.


Devendra

>
> Holger
>
>
>>         Johnny
>>
>>
>>     ​Also if you could suggest me one thing. Should I go for the proposal
>> now, so that I've
>>     sufficient time to accommodate your suggestions or should I wait for
>> the Phabricator discussion​?
>>     Any other suggestions also welcomed!
>>
>>
>> The student applications ends tomorrow so you should submit it before :).
>>
>> Johnny
>>
>>     Thanks
>>
>>
>>
>>         _______________________________________________
>>         GCompris-devel mailing list
>>         GCompris-devel at kde.org <mailto:GCompris-devel at kde.org>
>>         https://mail.kde.org/mailman/listinfo/gcompris-devel
>>
>>
>>
>>
>>     --
>>     It is not your qualifications but your exposure in life that makes
>> you who you are.
>>     Devendra Vyas
>>     Final Year,Comp. Science
>>     B.tech , The LNMIIT
>>     Jaipur(Raj.)
>>     Ph no. (+91)9460053732
>>
>>
>>
>>
>> _______________________________________________
>> GCompris-devel mailing list
>> GCompris-devel at kde.org
>> https://mail.kde.org/mailman/listinfo/gcompris-devel
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/gcompris-devel/attachments/20160324/578f97b7/attachment-0001.html>


More information about the GCompris-devel mailing list