r6 - 29 Jun 2005 - 15:18:46 - LisaDusseaultYou are here: OSAF >  Projects Web  >  ChandlerHome > ChandlerReleases > ZeroPointThreeRelease > ZeroPointThreeMapOfChandler

Map of Chandler

This document is a brief introduction to Chandler's technology stack, noting various other open source technologies that we're building on and introducing some terminology that is important to know to participate in technical discussions about Chandler. The Chandler technology stack at a glance, as of the 0.3 release:

MapOfChandler3.png

Python

Although it is not in the diagram, Python is a key piece of Chandler's technology stack. Chandler is distributed with a full Python installation; more for user convenience than because we've substantially altered Python. We're currently having a spirited debate about whether or not including Python in the distribution this way makes sense on all platforms; we're exploring various alternatives. We're currently using Python 2.3.2; generally you should be able to rely on standard Python 2.3 documentation.

wxWidgets

Creating a first class application on Macintosh, Linux, and Windows is one of OSAF's top priorities. We're using wxWidgets as our cross platform GUI framework, in particular the wxPython bindings. We chose wxWidgets because we wanted a native experience on each platform under one abstraction, with the option of writing platform specific code when necessary. That said, the OS X port is new and still needs a lot of work. We're committed to working with the wxWidgets and wxPython team to contribute to wxWidgets on all three platforms. We're using wxWidgets 2.4.2 as of the 0.3 release, but hope to transition to 2.5 soon after the release.

Repository

Chandler's repository and its relationship to data will be one of its signature interesting features. This is not your father's relational database! Inspired by RDF and associative databases, we put a lot of thought into using a flexible data model (and a lot of work into an implementation of that data model). Chandler's repository stores and retrieves persistent objects called Items. One of the interesting features of the data model is that schema information is stored similarly to all other data; Kinds and Attributes are types of Items. For a glimpse at the data model and the repository in more detail, check out the Repository Busy Developers Guide and this intro to the repository. The repository itself is implemented on top of Sleepycat's dbxml and Berkeley DB. We've also integrated Lucene, to use as a full text search engine. More information on the repository project can be found at Repository Framework.

Parcels

Parcels are Chandler's units of modularity and extensibility. Outside of the core subsystems, most of Chandler is written in parcels. Third parties will be able to extend Chandler by writing their own parcels. The foundation of our data driven application, parcels contain a set of Items that get loaded into the repository. A parcel is not a place that the user visits in the UI, although the parcel might define Items that are used to construct the UI (Blocks, Views, Events and Queries). A parcel might include Kinds and Attributes that define a schema, UI elements, agent items, even user data items. A parcel might also include python code, images, and other resources, referred to by the Items in the parcel. More information about parcels can be found in the Extending Chandler document.

Application

When we talk about the application, we are referring to both the base of the Chandler application and all of the parcels that get loaded into the repository. The base of the Chandler application creates a wxWidgets application, displays the splash screen, loads the repository, sets up a few global variables, loads all of the parcels, and performs various other initialization chores. Outside of this boostrapping and initialization, most of the application is implemented with parcels. A few of the parcels that Chandler currently contains are described below. Application Project? is the home page for status about the application in general.

Content Model Parcels

The Content Model is the data model for what we think of as the user's "content" in Chandler: Calendar Events, Contacts, Tasks, Notes, Mail Messages, etc. Most of the content model is PIM related, but one could imagine that third parties might define new types of items: MP3s, documents, etc. We auto generate documentation for schema items from all parcels -- a good way to explore the current state of the content model.

CPIA Framework (Blocks Parcel)

The Chandler Presentation and Interaction Architecture is a data driven UI framework used to build Chandler views. CPIA is not designed to be a general purpose UI toolkit (we have wxWidgets for that purpose), but is designed to operate at a higher level to build data driven applications on top of the Chandler repository. The framework defines Blocks and Events as basic building blocks. These elements, along with repository Queries, can be used to build Views. A View is a self contained UI element that describes layout information for the view (Blocks), information about interaction with other views (Events), and knowledge about how to populate the view with data from the repository (Queries). Because they are Items, Views can be shared, persisted to the repository, customized, etc. A major goal of the 0.3 release was to use CPIA for Chandler's UI, to transition away from the old "viewer parcel" model. Although we have indeed hit that goal, CPIA is still very much in the middle of development. For more information on CPIA, check out CPIA 0.3 status and this example.

Notification and Agent Framework Parcels

The Notification Framework and the Agent Framework? are two pieces of the Chandler infrastructure, implemented as parcels. The notification framework is used heavily by CPIA events. We're also using the notification framework for repository notifications to CPIA blocks.

Views

Although Views might be created dynamically, Chandler starts up with an initial set of Views. For the 0.3 release, the design team prepared a target for the apps team: ZeroPointThreeUI. We expect this UI to grow and change substantially, perhaps radically, as we iterate towards Chandler's eventual design. Our starting point:

  • Chrome The chrome view (or "main" view or frame) describes the outer layout of Chandler, including a navigation bar and a sidebar. The chrome view currently displays one sub-view (or content view) at a time. Eventually the chrome will be able to display tabbed sub-views. When chandler starts up, this sub-view view is an "About Chandler" view, implemented with an HTML block. Note that the design team has been calling this "Chrome" and the apps team has been calling this frame the "Main View" -- we'll get the terminology worked out soon.
  • Mixed, Calendar, Contacts, Notes Views of the user's data: contacts, calendar events, and notes. In particular, the mixed view was added because we know we want to break down the "silos" of traditional PIM applications: we can see different kinds of data in the same view. We wanted to start experimenting with implementing such a view in CPIA.

The next set of views is intended more for developers than for end users:

  • Repository Enables the user to browse the contents of the repository.
  • Block Demo A place to demonstrate various CPIA blocks.

Last but not least, we migrated the ZaoBao code from the first release of Chandler. Although RSS functionality is not one of Chandler's primary goals for the 1.0 release, we thought it would make a good example to push CPIA before we had a real design ready:

  • ZaoBao ZaoBao is a set of views that display RSS items loaded by Chandler. We think of this view as an example view, more like a 3rd party view. ZaoBao also let us experiment with agents and threads.

These Views are all defined in parcels, as are all of the other items that get loaded into the Chandler repository the first time Chandler starts. Third parties will be able to define new Views, as well as other types of items in third party parcels.

Custom parcels

As mentioned above, third parties will be able to extend chandler by writing parcels. These parcels might define Kinds and Attributes, Views, or even implement new Blocks. An MP3 parcel, for example, might contain all of these types of items. As Chandler matures, one could imagine different kinds of items that a parcel might define; "spell checkers" is one example that we've mentioned before. We expect to add a framework to "register" such items with Chandler, so that they can be discovered. We have not yet implemented all of the infrastructure necessary for people to write such 3rd party parcels.

We've come to the end of our brief tour of Chandler's technology stack. One other map that might be useful to developers is a short explanation of the placement of Items in the repository...

Map of Repository Contents

When you load Chandler for the first time, if you take a peek at the Repository view, you'll notice it has this structure:

   //userdata/contentitems/*
             /zaobaoitems/*
   //Schema/core/*
   //parcels/OSAF/contentmodel/*
                 /examples/*
                 /framework/*
                 /views/*
   //Packs/*

The application's repository currently has four roots: userdata, Schema, parcels, and Packs. Every item in the repository needs a location, and this is the structure we are currently using for placing items in the repository. Note that this structure is important in the sense that every item has a well known name, but has no other semantic meaning.

  • userdata is meant to be the location of the user's data, in particular the user's "content items": calendar events, tasks, email messages, notes, etc. We currently put the zaobao items in a different namespace/container, as a temporary workaround to a problem with conflicts between threads in Chandler. We expect this problem to be resolved very soon after 0.3, when the repository gets more sophisticated merging features. After the problem is resolved, we will put zaobao items in the same place.
  • Schema is the location of the repository's core schema, the items that the repository creates as it bootstraps into being. Examples: Kind, Attribute, etc.
  • parcels is the location of all of Chandler's parcels. The path of the parcel's container is currently considered its "namespace". The namespace of each parcel reflects the directory structure under Chandler/parcels. We chose this convention to avoid managing duplicate hierarchies. Most of these parcels are described above.

  • Packs is the location of "packs". Packs are not unlike parcels, the repository's own mechanism for loading groups of items. The core schema pack is currently the only pack loaded by the application.

-- KatieCappsParlante - 23 Feb 2004

Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r6 < r5 < r4 < r3 < r2 | More topic actions
 
Open Source Applications Foundation
Except where otherwise noted, this site and its content are licensed by OSAF under an Creative Commons License, Attribution Only 3.0.
See list of page contributors for attributions.