Dynamic library

Jump to: navigation, search

Part of the library activity. For further uses cases, see more dynamic library notes, and related discussion at Memebrand.

There is discussion as to whether it makes sense to have a separate library activity, or to keep it as part of the current Web activity. Of course "browse" is a fine verb for using a library, even an interactive one. --Sj talk

Dynamic Library specification

The XO content library, the set of browsable collections of materials on the laptop, is currently presented as a static set of HTML pages. We propose a webserver-based implementation of a dynamic library interface which shares components and design goals with other current and planned Activities.


The current library is a constellation of non-interacting directories of static HTML and media. It has a single navigation page which is rebuilt with a small amount of new information when a new collection is installed on the system. The library is not searchable, and all navigation information exists on a single web page generated on installation, upgrade, or the install of a new content bundle. The only navigation system is a single directory hierarchy; viewing a library bundle removes all navigation from the user interface.

A dynamic content library should allow for many options in terms of display, searching and navigation. It should allow for capturing and storing information about how the user wishes to interact with and navigate the system, including annotation and tagging. It should provide a good search of its collections, and should be able to coordinate its searches with larger libraries when it is connected to other libraries, such as a schoolserver library. It should support customization, such as toggling of language choice within a collection without changing the entire interface. Finally, a dynamic library should support export of subelements of a collection for sharing, and collaboration and sharing of customization and annotation information with other XOs.

We propose an implementation that relies on an on-system webserver, for a few aditional reasons: this allows collection maintainers to design custom dynamic views, and allows for current implementations of interactive collections to work with minimal rewriting on the XO. This would also allow users to enjoy offline use of webserver-based services during periods without connectivity, by sharing infrastructure with other planned applications, such as a wiki system that are designed to have both XO and school server components.


As the variety of collections available to the XO grows and becomes more customized by countries and the individual users of XOs, the lack of a dynamic interface to content on the laptop makes search and navigation more difficult. Dynamic interaction with content bundles and bundle metadata will dramatically improve users' ability to find, explore, and navigate content on their systems and to interact and contribute with this content in more meaningful ways.

Moreover, the creators of library collections will know best what sorts of dynamic navigation are appropriate for their collections, and will benefit from access to a library of tools that can manipulate views of files and descriptions they contain, while leveraging the rendering and caching features of the shared Browser.

Use cases

Jorn opens his content library and sees a dynamically generated view of available materials on his machine. He is able to search and to limit his view to certain tags and categories. When Jorn is viewing a bundle -- distributed as set of static HTML pages and associated files -- he is able shown navigation information for the entire content library not included in the HTML files from the bundle.

Bardolf downloads a content bundle on the XO. At the end of each "unit" in the bundle, he is allowed to take a quiz to test his knowledge an understanding and to store the results of these quizzes these for future reference. These results can be saved in a format that allows them to be sent to others in a group collaboration.

Wambua views a page hosted on her school library. She returns to the page later when not connected to the library, and sees an intelligent error message, specific to how long ago she had been able to see it and her current level of connectivity.

Abeba opens a content library in a school with access to a school server. A search for available content turns up no hits in the XO content library but the system contacts the school server and, without prompting Abeba again, finds content there that match his search. These show up in the search results. The same search done later in the night while Abeba is at home without access to the school server and works, but does not include the school server results [which are not available].

Extended use case: the second search result notes that it is no longer returning the same search result as before, because it has cached catalog-level information about what materials have been located/browsed in searches -- while it cannot turn up full cached pages of the prior results, it knows they exist.

Jose finds a picture in the content library of an animal he recently saw. He adds a annotation to the picture describing his experience and the differences he noticed. The annotation is stored for later reference.

Maria edits a document in wiki while at school with friends. She stores a copy in her on-laptop wiki to work on while at home. The next morning, she syncs to the system. In all cases, she uses the same interface in her webserver.

Proposed Implementation

A dynamic webserver, as well as interaction with other web-based interfaces on the system, should be implemented using a single webserver on the machine which runs a simple WSGI application that implements the dynamic library.

Library-wide functions such as searching, and generation of default views of the library collections (e.g., an overview page with one icon per collection, or a statistical view providing a summary of the number of items in each collection by type, and the number of items that have and have not been viewed) will be implemented as part of this application.

The content library will be the first application to use this webserver and, in first phase, will be the only application to do so. Ultimately, content bundles should be able to include their own interactive content to be run by the same server -- in a secure fashion -- and additional applications in activities should be able to use the same framework to launch their own dynamic web content.

The system should minimize the resource footprint of running applications so they are only loaded when needed in order to conserve resources; and should be lightweight and secure.

This article is a stub. You can help the OLPC project by expanding it.