2. Architecture

LoaMA is a personal media aggregator capable of handling text, audio and video media (from simple audio/video streaming to phone calls), surfing the net and collecting RSS feeds.

LoaMA provides mechanisms that allow each user to customize the way content is manipulated and routed, for instance filtering before reading/playing it. Filtering may achieved by composing several transformation steps (that we call “Transformer”). Each transformer performs a different action on its input, like filtering, merging, splitting and others as explained later.

Suppose for instance that the user is interested in finding among his collections, all audio clips by a single author. This task can be achieved composing three transformers: the first one gathers the contents from a location on disk creating a feed consisting of metadata, the second one selects the audio files and the third one filters the results searching for the given author among the collected feed metadata.

A fundamental design decision in LoaMA is to handle all data uniformly as RSS feeds: a single data type for RSS feed is used to represent both material retrieved from external sources and produced by the system and used internally by the system (e.g. playlists for visualization). This approach provides both simplicity and flexibility.

The development of LoaMA has been carried out by a team of about 70 students split into several groups. We will briefly sketch the following LoaMA modules:

·       Retriever

·       Transformer

·       Data Flow

·       Server

·       User Interface

·       Mobile

2.1. Retriever

A retriever object is created for handling the retrieval of a given URL. The gathered content is stored in a specified location on disk. If the requested document is not an RSS feed, the retriever also creates a simple RSS feed file, consisting in a single item, containing metadata about the document and an enclosure referring to the actual local copy. This allows the rest of the system to operate uniformly just on RSS feeds.

Retrievers use methods from the FeedSubscriber interface that their callers must provide, in order to notify them about the progress and completion of a download.

Various kinds of retrievers are available, each one handling a specific protocol. The currently supported protocols are:

·       http

·       ftp

·       BitTorrent

·       Skype

The Skype interface provides the capability to issue VoIP phone calls while the other protocols allow file downloads from the Internet providing the typical features of a media aggregator.

The retriever module dispatches network requests to the appropriate retriever and keeps track of the status and progress of each download.

The search module, which allows searching through the collected contents as well as on local disk, also produces its results as an RSS feed.

A cache mechanism is available in order to reduce latency of retrieval.

2.2. Transformers

Transformers are used in LoaMA for most of the internal system tasks and are exposed to users who can combine them in any way to achieve their needs. Transformers operate on RSS feeds of any kind and produce RSS feeds.

Composability of transformers is achieved by defining a single interface that each transformer must implement:


interface ITransformer {

  RssFeed[] Input { get, set }

  RssFeed  Output { get }


i.e. a transformer accepts an array of RssFeed as input and produces a single RssFeed as output. There is no lack of generality here since a RssFeed object may contain several channels, which may possibly be split into separate feeds.

A number of simple transformers have been built and are currently available:

·       Merge: merges several feeds into one

·       Filter: select items from a feed according to a certain criterion, for instance selecting feeds from a specified source or in a specified format

·       Split: splits one feed into many

·       Shuffle: rearranges the items in a random order

·       Sort: sorts the items according to a certain criterion.

The last two transformers are also used internally by LoaMA to operate on playlists, exploiting the fact that playlists are themselves represented as RSS feeds.

Some transformers accept configuration options to control their operation: for example, a filter transformer must be given the filtering criteria to be applied to an RSS feed.

A few more complex transformers are also available:

·       Indexer: creates a searchable index for a collection of feeds

·       Classifier: divides the items in a feed into a set of predefined classes

·       Clusterer: groups channel items into sets with similar content.

The Indexer transformer is helpful in providing faster search through user collections. The indexer creates a searchable full-text index by analyzing the text documents in the user collections (HTML, RSS documents), or by extracting metadata (e.g. author, title, etc.) from other media types. Such metadata are extracted and stored in the RSS feed document created by the retrievers.

2.3. Data Flow

The Data Flow module bestows the possibility of customizing LoaMA. A LoaMA user can compose transformers to perform tasks such as classifying, collecting and filtering contents. The user can automate the process of creating his own playlists, to organize and classify his material, and to share it with other LoaMA users.

Figure 1. A Composition of transformers.

Figure 1 illustrates a data flow where a merger transformer merges three retrieved feeds, two other feeds are filtered and the two output feeds are classified to produce the final feed, that will consists of several channels, one for each classification category.

Transformers can be built through the LoaMA user interface: the user selects which feeds he wants to transform and then selects from a window pop up among a number of available transformers to apply to them. The resulting output feed of the transformation is added to a list of temporary feeds, appearing in a specific pane in the user interface (bottom left in Figure 1), so that it can be selected again as input to further transformations. The composition of transformers creates a data flow of RSS feeds, which is itself a transformer of type CompositeTransformer that can be saved for use in creating other compositions. This step involves generating code for the composite transformer and compiling it into a new assembly (DLL) that becomes part of the available transformers loaded at application start up.

Figure 2. A Composite transformer.

A Data Flow is made out of TransformerNode’s connected to each other. The Data Flow process is demand driven: the resulting RSS feed of a transformation is obtained by calling the Start() method on a TransformerNode. The TransformerNode in turn invokes Start() on all of its input transformers. This triggers a cascade of requests on each component of the dataflow, until the request reaches a retriever or a primitive transformer with no inputs. A TransformerNode is notified through its FeedSubscriber interface when a feed becomes available for processing. When the transformer’s input feeds are all available, it applies its transformation on the collected feeds in order to produce its output feed and notifies its caller.

Data Flow transformations occur between a local RSS feed retriever and a user interface Presenter. A dummy TransformerNode is used to interface transformers to locally stored RSS feeds.

Applying different transformers to his feeds allows a LoaMA user to customize every step in handling feeds, from retrieval to selection, presentation, storage and distribution.

2.4. Server

This module provides a server facility to LoaMA, so that users can publish the material they wish to make available to others either through the Web or other file sharing protocols.

The server currently implements a subset of the HTTP protocol, including GET requests and HTTP authentication to restrict access. The server also supports the BitTorrent protocol, implementing the operations for startup, shutdown and logging.

The server module consists in:

  • Web Server
  • Throttler
  • Access Control
  • Logger
  • BitTorrent
  • Monitoring
  • Streaming

The Web Server handles all incoming requests from external users, either general Http or BitTorrent requests. In the latter case, the BitTorrent module is invoked.

The throttler has the task to control the overall use of bandwidth within LoaMA. This is a difficult task, since various components of LoaMA have different requirements and employ protocols that do not incorporate provisions for bandwidth control. Bandwidth control is essential in a media aggregator which can consume bandwidth eagerly, both in download and upload.

Several alternatives where considered in the design of the throttler: a drastic solution would have been to force all retrievers/uploaders to use a special socket interface incorporating bandwidth control. This would have been impractical because it would have required re-implementing all protocols from scratch. A simpler solution was chosen where the throttler assigns an upper amount of bandwidth to each of the concurrent retrieval threads according to a user assigned priority. Each thread is requested to comply within this limit. This restrain mechanism has been implemented in the http retrievers, which exploit IO completion ports, and hence can be delayed when the overall bandwidth limits is achieved. BitTorrent 4.0 already provides a bandwidth limitation mechanism that the throttler can exploit.

The BitTorrent module serves requests for files having the .bt extension (requests for metainfo .torrent files are handled instead by the Web server): it runs a tracker and implements the BitTorrent peer wire protocol responding to requests from BitTorrent clients for a piece of a file.

The Access Control module implements a login and password mechanism to manage the authentication for users that want to access to the server.

The logger records the user actions, since the startup of the application and it writes error messages to a log file.

The Monitoring module displays information about the current uploads from other network users. The module allows controlling bandwidth usage, for instance terminating some very demanding transfers.

The Streaming module sends multimedia files, such as mp3, wma or other, through http streaming. It displays information regarding the streaming process, e.g. the size and name of the file being transferred, the progress and status of the transfer. It is also possible to kill one or all of the existing uploads.

2.5. User Interface

The UI module provides an intuitive, graphical interface for reading the collected media and for controlling the facilities of the LoaMA application.

Figure 3. The LoaMA user interface.

Main Window

The main window of LoaMA handles the typical interaction controls (toolbar, menu bar) and it is split into several panes, each one handled by a specific presenter.


The Playlist Presenter displays the tree structure of the current playlist.

A playlist is organized in categories and the user can manipulate the folders corresponding to each category.

An interesting feature of LoaMA is that playlists are themselves represented as RSS feeds, so that they can be exported and exchanged with other users. For the same reason playlists can be manipulated and transformed by any of the LoaMA transformers: for instance they can be merged, clustered or classified, merged with annotations, analyzed by statistical tools, or passed to recommendation systems to obtain suggestions for other potentially interesting items to the user.

Keeping track of read items in a playlists is also dealt by manipulating RSS feeds: an RSS feed is generated which contains additional metadata about the items in the playlist, e.g. whether the item has been read, where it is stored locally and so on. Whenever the playlist is loaded, it is merged with such additional metadata feed to present the user with its personal view of the playlist.

RSS Presenter

The RSS Presenter displays, for each RSS feed, the list of items present in its channel.

When an item is selected from this list, its content is transformed from XML into a stylized HTML and shown in the Web Browser tab below.

This module interacts with other UI modules: for instance after selecting an item, the appropriate player can be started.

Multimedia Presenter

The Multimedia Presenter gets invoked to start the presenter suitable for a specific media: the browser for HTML documents or the media player for audio/video files.

Download Manager

This module creates the appropriate retriever to perform a requested download for a URL and returns an observer object, which can be used to monitor the progress of the download, to suspend/resume or stop it and also to throttle the amount of bandwidth it uses.

2.6. Mobile

A version of LoaMA has been developed for cellular phones. This module has been developed on the Java platform, because of its availability on a wide range of mobile phone models.

Mobile LoaMA provides the following features:

·       RSS 2.0 support: implementation of a RSS parser and different RSS viewer for all possible content types of RSS feed entries.

·       Embedded Media Player: a player for multimedia content (audio and video) of user playlist implemented with MMAPI.

·       Embedded Image Viewer: a viewer for user photo gallery or playlist.

·       Embedded HTML Browser: a browser to visualize web contents.


Figure 4. LoaMA on a cell phone.

The application also supports optimizations for RSS feed download (e.g. caching of downloaded feed, proxy) and search (RSS filters).