Difference between revisions of "Activities/Library"

From Sugar Labs
Jump to navigation Jump to search
 
(17 intermediate revisions by 6 users not shown)
Line 1: Line 1:
<noinclude>{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}{{TOCright}}
+
<noinclude>{{GoogleTrans-en}}{{TOCright}}
 +
[[Category:Activities|Library]]</noinclude>
 +
 
 +
----
 +
'''NOTE:''' Core functionality of Library was moved to [[Features/Unified Browser for Objects]], since now Library will be implemented in plugin form (as a separate activity).
 +
----
  
 
= Thanks to =
 
= Thanks to =
Line 6: Line 11:
  
 
= Related ideas =
 
= Related ideas =
 +
 +
* [http://wiki.laptop.org/go/Journal%2C_reloaded Journal, reloaded]
 +
* [[Design_Team/Designs/Journal#01|Journal mockups]]
 +
* [[Unified Bundles]]
 +
* [[User:Alsroot/trash/Unified Objects | Unified Objects]]
 +
* ...
  
 
= Purposes =
 
= Purposes =
  
 
Cornerstone ideas:
 
Cornerstone ideas:
* implement [[Unified Objects]] proposal to have unified method to create, reuse and share ''all'' Objects in Sugar
+
* implement [[User:Alsroot/trash/Unified Objects | Unified Objects]] proposal to have unified method to create, reuse and share ''all'' Objects in Sugar
 
* work with ''remote'' Sugar Objects in the same way like with ''local''
 
* work with ''remote'' Sugar Objects in the same way like with ''local''
* make this activity Sucrose version independent(0.82+)
+
* make this activity Sucrose version independent (0.82+)
  
 
= Objects model =
 
= Objects model =
Line 42: Line 53:
  
 
* ''creator'' for activities
 
* ''creator'' for activities
* ''creation'' for objects that were generated by activity(''activity_id'' field is not empty)
+
* ''creation'' for objects that were generated by activity (''activity_id'' field is not empty)
 
* ''unbind'' for Journal objects w/o ''activity_id'' field
 
* ''unbind'' for Journal objects w/o ''activity_id'' field
 
* ''local'' objects are stored in Journal
 
* ''local'' objects are stored in Journal
Line 101: Line 112:
 
** ''local objects'' that were created on local system
 
** ''local objects'' that were created on local system
 
** ''local objects'' that were downloaded from remote ''source''<br>user can sync them with original remote objects
 
** ''local objects'' that were downloaded from remote ''source''<br>user can sync them with original remote objects
* ''remote objects'' stored in the Journal of other(online) users
+
* ''remote objects'' stored in the Journal of other (online) users
  
 
=== Sources ===
 
=== Sources ===
  
Every Library object has list of known(not necessarily online) ''sources'' of objects:
+
Every Library object has list of known (not necessarily online) ''sources'' of objects:
  
 
* ''local objects'' stored in local Journal
 
* ''local objects'' stored in local Journal
* ''Sugar users'' joined(if they are online) to this Library session
+
* ''Sugar users'' joined (if they are online) to this Library session
 
* (?) ''activities.sugarlabs.org''
 
* (?) ''activities.sugarlabs.org''
 
* (?) ''various sources'' that are provided by proper backend, for example books from gutenberg.org
 
* (?) ''various sources'' that are provided by proper backend, for example books from gutenberg.org
  
If ''source'' is online user can browse his objects(in separate way or merging them to the main set of objects) and download or download+start them.
+
If ''source'' is online user can browse his objects (in separate way or merging them to the main set of objects) and download or download+start them.
  
 
=== Synchronize/Upgrade objects ===
 
=== Synchronize/Upgrade objects ===
Line 137: Line 148:
 
* ''download'' remote object, if current object is from remote ''source'' and wasn't downloaded previously
 
* ''download'' remote object, if current object is from remote ''source'' and wasn't downloaded previously
 
* ''sync'' current object with remote one, if current object was originally downloaded from remote ''source''
 
* ''sync'' current object with remote one, if current object was originally downloaded from remote ''source''
* ''delete'' object from local system(i.e. from the Journal), if current object was originally downloaded from remote ''source'' it would turn to "un-downloaded" state
+
* ''delete'' object from local system (i.e., from the Journal), if current object was originally downloaded from remote ''source'' it would turn to "un-downloaded" state
  
 
=== Tags sidebar ===
 
=== Tags sidebar ===
Line 146: Line 157:
 
* ''related tags''
 
* ''related tags''
 
** cloud of ''related tags''
 
** cloud of ''related tags''
** tree(made by ''composite tags'') of ''related tags''
+
** tree (made by ''composite tags'') of ''related tags''
 
* without any tags i.e. all objects
 
* without any tags i.e. all objects
  
Line 163: Line 174:
 
It filters objects for ''tags sidebar''
 
It filters objects for ''tags sidebar''
  
List of known(not necessarily online) ''sources'' of objects.<br>
+
List of known (not necessarily online) ''sources'' of objects.<br>
 
User can select proper item to view objects only for this ''source''.
 
User can select proper item to view objects only for this ''source''.
  
Line 169: Line 180:
  
 
[[Image:library.svg|200px]]
 
[[Image:library.svg|200px]]
 +
[[Image:-1.png|200px]]
 +
[[Image:-2.png|200px]]
 +
[[Image:-3.png|200px]]
 +
[[Image:-4.png|200px]]
  
 
= Usage scenarios =
 
= Usage scenarios =
Line 178: Line 193:
 
# ''B'' browses ''A''s ''local'' objects
 
# ''B'' browses ''A''s ''local'' objects
 
# ''B'' can download particular/all ''A'''s ''local'' objects
 
# ''B'' can download particular/all ''A'''s ''local'' objects
# ''B'' can merge ''A'''s ''local'' objects to the objects list(only for current session)
+
# ''B'' can merge ''A'''s ''local'' objects to the objects list (only for current session)
 
# during the next online session ''B'' can synchronize previously downloaded objects
 
# during the next online session ''B'' can synchronize previously downloaded objects
  
Line 195: Line 210:
 
# make these activities auto-updated
 
# make these activities auto-updated
 
# add rule to include to this "Activities" object all activities
 
# add rule to include to this "Activities" object all activities
# treats created Library object like a regular Home view i.e. use it to run all(preinstalled and downloaded) activities
+
# treats created Library object like a regular Home view i.e. use it to run all (preinstalled and downloaded) activities
# "auto-updated" should mean that downloaded activities will be up-to-date(in some way) when "Activities" object is run
+
# "auto-updated" should mean that downloaded activities will be up-to-date (in some way) when "Activities" object is run
  
 
=== Publish objects on non-Sugar sources ===
 
=== Publish objects on non-Sugar sources ===
Line 249: Line 264:
 
! Real date
 
! Real date
 
|-
 
|-
| Local version
+
| Local version<br>v1
 
| 2009-05-12
 
| 2009-05-12
 
| 2009-05-29
 
| 2009-05-29
 
|-
 
|-
| Remote version(Sugar users as an objects source)<br>v1 release
+
| Remote version(Sugar users as an objects source)
 
| 2009-05-19
 
| 2009-05-19
 
|  
 
|  
 
|-
 
|-
| Publish objects on activities.sugarlabs.org<br>v2 release
+
| Publish objects on activities.sugarlabs.org
 
| 2009-05-26
 
| 2009-05-26
 
|
 
|
 
|-
 
|-
| Provide [[#Keep activities up-to-date]] scenario for LTSP<br>v3 release
+
| Provide [[#Keep activities up-to-date]] scenario for LTSP
 
|
 
|
 
|
 
|
 
|-
 
|-
| Provide [[#Keep activities up-to-date]] scenario for intranet library portal<br>v4 release
+
| Provide [[#Keep activities up-to-date]] scenario for intranet library portal
 
|
 
|
 
|
 
|
 
|-
 
|-
 
|}
 
|}
 +
 +
== Activity Library ==
 +
 +
See also [[Activities/Activity Library]].
  
 
= Resources =
 
= Resources =
  
 
* [http://git.sugarlabs.org/projects/library Sources]
 
* [http://git.sugarlabs.org/projects/library Sources]
 
+
* [http://activities.sugarlabs.org/en-US/sugar/addon/4089 Activity Library page]
[[Category:Activities]]
 

Latest revision as of 10:02, 29 April 2010


NOTE: Core functionality of Library was moved to Features/Unified Browser for Objects, since now Library will be implemented in plugin form (as a separate activity).


Thanks to

Library activity idea was inspired by iaep@ mailing list thread.

Related ideas

Purposes

Cornerstone ideas:

  • implement Unified Objects proposal to have unified method to create, reuse and share all Objects in Sugar
  • work with remote Sugar Objects in the same way like with local
  • make this activity Sucrose version independent (0.82+)

Objects model

How it looks like from top-level point of view.

Everything is an object

So, journal objects, activities/activity-bundles, content/content-bundles are the same level objects.

All object versions

  • by activity_id if it exists
  • by activity for activities/bundles

are represented in Library by one collapsed item.

Every Library object could include:

  • auto included Journal objects
    • new version of object, if object was already included
    • by datastore fields, like mime_type, tags etc.
  • all Journal objects

Tags

Every Library object have finite quantity of predefined tags and infinite quantity of users tags.

Objective tags

Will be set by Library activity itself after including new Object.

  • creator for activities
  • creation for objects that were generated by activity (activity_id field is not empty)
  • unbind for Journal objects w/o activity_id field
  • local objects are stored in Journal
  • remote object from online source (only for current session)

Properties based tags

  • tags values parsed from object's properties

Subjective tags

Will be set by objects authors or users

  • activity required and mutually exclusive for content
  • content required and mutually exclusive for activity
  • endless quantity of users tags

Composite tags

User tags could be composite.

If we have:

  • games tag -> object #1
  • books/nonfiction tag -> object #2
  • books/science-fiction tag -> object #3
  • news tag -> object #4

On the top level in cloud view in tags sidebar we have:

  • games tag -> object #1
  • books tag -> object #2, object #3
  • news tag -> object #4

After choosing books tag in cloud view in tags sidebar:

  • nonfiction tag -> object #2
  • science-fiction tag -> object #3

Properties

Every object can have:

  • summary short explanation
  • description longer explanation
  • icon of object
  • screenshot of object
  • rank

By default, some properties could be filled from Journal fields or from object itself (like .ogg properties).

Sharing

How users can share their objects.

Type of objects

Library user could operate with two kinds of objects:

  • local objects stored in the local Journal; they are regular Journal objects
    • local objects that were created on local system
    • local objects that were downloaded from remote source
      user can sync them with original remote objects
  • remote objects stored in the Journal of other (online) users

Sources

Every Library object has list of known (not necessarily online) sources of objects:

  • local objects stored in local Journal
  • Sugar users joined (if they are online) to this Library session
  • (?) activities.sugarlabs.org
  • (?) various sources that are provided by proper backend, for example books from gutenberg.org

If source is online user can browse his objects (in separate way or merging them to the main set of objects) and download or download+start them.

Synchronize/Upgrade objects

User can manually/auto synchronize local versions with remote versions from online sources.

UI

Core UI components.

Objects list

The list of objects which represents result of chosen tags.

Modes:

  • list view a la Journal
  • thumbs view
  • grid view a la Calibre

User have several options for list items:

  • open object, for non-creator objects
    for unbind objects use the "right" activity to handle it i.e. open .txt in ReadEText not in Write
  • create new objects, for creator objects
  • edit current object, for creator objects
  • download remote object, if current object is from remote source and wasn't downloaded previously
  • sync current object with remote one, if current object was originally downloaded from remote source
  • delete object from local system (i.e., from the Journal), if current object was originally downloaded from remote source it would turn to "un-downloaded" state

Tags sidebar

It filters objects for objects list.

  • chosen tags backslashed list of tags that were chosen
  • related tags
    • cloud of related tags
    • tree (made by composite tags) of related tags
  • without any tags i.e. all objects

After proper tag was chosen:

  1. selected tag' would be added to chosen tags list
  2. related tags would reflect on the final list of objects
  3. objects list would contain the final list of objects

User can choose what kinds of tags it should contain:

  • objective tags
  • properties based tags
  • subjective tags

Sources sidebar

It filters objects for tags sidebar

List of known (not necessarily online) sources of objects.
User can select proper item to view objects only for this source.

Mockup

Library.svg -1.png -2.png -3.png -4.png

Usage scenarios

Share objects between Sugar users

  1. user A creates/fills his Library object and shares it
  2. user B joins A's Library session
  3. B browses As local objects
  4. B can download particular/all A's local objects
  5. B can merge A's local objects to the objects list (only for current session)
  6. during the next online session B can synchronize previously downloaded objects

(?) Download objects from non-Sugar sources

  1. user selects proper non-sugar source in the sources list, for example activities.sugarlabs.org or gutenberg.org
  2. makes it online
  3. user browses remote objects
  4. user can download particular/all remote objects
  5. user can merge remote objects to the objects list(only for current session)

Keep activities up-to-date

  1. user creates "Activities" Library object
  2. downloads activities from proper source
  3. make these activities auto-updated
  4. add rule to include to this "Activities" object all activities
  5. treats created Library object like a regular Home view i.e. use it to run all (preinstalled and downloaded) activities
  6. "auto-updated" should mean that downloaded activities will be up-to-date (in some way) when "Activities" object is run

Publish objects on non-Sugar sources

  1. selects object to publish in object list
  2. click "publish" button

Implementation

Implementation details.

Database model

Library follows simple rules:

  • use local datastore API to search/filter local objects
  • use remote datastore API(in some way) to search/filter remote objects
  • use telepathy tubes for notifying users about changes
  • sync shared objects while opening Library activity or manually

Going further

Integration with Sugar components

  • downloaded files by Browse activity

Simplify UI usage

  • several levels of UI complexity
  • presets with different sets of UI components

Various non-sugar sources

  • FTP servers

Room/Lesson mode

At the first approach it could look like:

  1. teacher prepares one or several Library objects for future lesson
  2. during the lesson teacher shares proper Library object for all students
  3. teacher could observe if all students were joined to proper Library object, to proper object inside of Library object

So, this mode should contain mini-neighbourhood view for Library object's items.

Roadmap

Task Planned date Real date
Local version
v1
2009-05-12 2009-05-29
Remote version(Sugar users as an objects source) 2009-05-19
Publish objects on activities.sugarlabs.org 2009-05-26
Provide #Keep activities up-to-date scenario for LTSP
Provide #Keep activities up-to-date scenario for intranet library portal

Activity Library

See also Activities/Activity Library.

Resources