Changes

Jump to navigation Jump to search
6,908 bytes added ,  11:02, 29 April 2010
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>
   −
== Purposes ==
+
----
 +
'''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 [http://thread.gmane.org/gmane.comp.education.sugar.discuss/2586 iaep@ mailing list thread].
 +
 
 +
= 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 =
    
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 =
    
How it looks like from top-level point of view.
 
How it looks like from top-level point of view.
   −
=== Everything is an object ===
+
== Everything is an object ==
    
So, journal objects, activities/activity-bundles, content/content-bundles are the same level objects.
 
So, journal objects, activities/activity-bundles, content/content-bundles are the same level objects.
Line 22: Line 39:     
Every Library object could include:
 
Every Library object could include:
* manually included Journal objects
   
* auto included Journal objects
 
* auto included Journal objects
** by MIME type
   
** new version of object, if object was already included
 
** new version of object, if object was already included
 +
** by datastore fields, like ''mime_type'', ''tags'' etc.
 
* all Journal objects
 
* all Journal objects
   −
=== Tags ===
+
== Tags ==
    
Every Library object have finite quantity of predefined tags and infinite quantity of users tags.
 
Every Library object have finite quantity of predefined tags and infinite quantity of users tags.
   −
===== Objective tags =====
+
=== Objective tags ===
   −
Will be set by activity itself after including new Object.
+
Will be set by Library activity itself after including new Object.
    
* ''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
* ''remote'' link to remote object
+
* ''remote'' object from online ''source'' (only for current session)
 +
 
 +
=== Properties based tags ===
 +
 
 +
* tags values parsed from object's properties
   −
===== Subjective tags =====
+
=== Subjective tags ===
   −
Will be set by activity authors or users
+
Will be set by objects authors or users
    
* ''activity'' required and mutually exclusive for ''content''
 
* ''activity'' required and mutually exclusive for ''content''
Line 50: Line 70:  
* ''endless quantity of users tags''
 
* ''endless quantity of users tags''
   −
===== Composite 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
   −
User tags could consist of several child tags to represent tree of users tags.<br>
+
After choosing ''books'' tag in ''cloud'' view in ''tags sidebar'':
See [[#]].
+
* ''nonfiction'' tag -> object #2
 +
* ''science-fiction'' tag -> object #3
   −
=== Properties ===
+
== Properties ==
    
Every object can have:
 
Every object can have:
Line 67: Line 101:  
By default, some properties could be filled from Journal fields or from object itself (like .ogg properties).
 
By default, some properties could be filled from Journal fields or from object itself (like .ogg properties).
   −
=== Remote Objects ===
+
== 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''<br>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<br>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:
 +
# selected ''tag' would be added to ''chosen tags'' list
 +
# ''related tags'' would reflect on the final list of objects
 +
# ''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.<br>
 +
User can select proper item to view objects only for this ''source''.
 +
 
 +
=== Mockup ===
 +
 
 +
[[Image:library.svg|200px]]
 +
[[Image:-1.png|200px]]
 +
[[Image:-2.png|200px]]
 +
[[Image:-3.png|200px]]
 +
[[Image:-4.png|200px]]
 +
 
 +
= Usage scenarios =
 +
 
 +
=== Share objects between Sugar users ===
 +
 
 +
# user ''A'' creates/fills his Library object and shares it
 +
# user ''B'' joins ''A'''s Library session
 +
# ''B'' browses ''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)
 +
# during the next online session ''B'' can synchronize previously downloaded objects
 +
 
 +
=== (?) Download objects from non-Sugar sources ===
 +
 
 +
# user selects proper non-sugar source in the sources list, for example activities.sugarlabs.org or gutenberg.org
 +
# makes it online
 +
# user browses remote objects
 +
# user can download particular/all remote objects
 +
# user can merge remote objects to the objects list(only for current session)
 +
 
 +
=== Keep activities up-to-date ===
 +
 
 +
# user creates "Activities" Library object
 +
# downloads activities from proper source
 +
# make these activities auto-updated
 +
# 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
 +
# "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 ===
 +
 
 +
# selects object to publish in object list
 +
# 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 ===
 
=== Room/Lesson mode ===
   −
== UI ==
+
At the first approach it could look like:
 +
 
 +
# teacher prepares one or several Library objects for future lesson
 +
# during the lesson teacher shares proper Library object for all students
 +
# 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 =
 +
 
 +
{| border=1 cellpadding=3 style="border: 1px solid white; border-collapse: collapse; background: #e3e4e5;"
 +
|-style="background:#787878; color: white;"
 +
! Task
 +
! Planned date
 +
! Real date
 +
|-
 +
| Local version<br>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 =
   −
[[Category:Activities]]
+
* [http://git.sugarlabs.org/projects/library Sources]
 +
* [http://activities.sugarlabs.org/en-US/sugar/addon/4089 Activity Library page]

Navigation menu