[sugar] Develop Activity

Ian Bicking ianb
Mon Dec 18 13:43:45 EST 2006

Dan Williams wrote:
> One thing we had discussed with respect to an IDE was that it should
> hide all directory structure in the GUI.  The child could create
> categories or something, but there's really no reason whatsoever to
> expose that when the only thing that needs it is the activity.info file
> and the icon, both of which are in the same directory.
> We don't have a "file manager", so there's no other place where
> directories are/should be exposed right now.  "objects" added to the
> project (be they icons, python code, pictures, whatever) could be tagged
> with arbitrary tags and sorted by those tags in the project layout.
> Python makes things somewhat complicated by imposing a directory
> structure underneath the 'imports' command, but for the moment we had
> thought that a simplified activity IDE for children should just show a
> flat structure.

Ah, directories, filenames, and compound documents -- the big open 
issues in the document store / journal.

An activity in this sense is something like a compound document.  It's a 
single entity with many pieces.  These pieces are all related to each 
other.  The way these relations are traditionally represented is through 
filenames.  (Many of the same issues apply to a compound HTML document, 
which refers to things like images by filename as well)

Well, if it's more palatable to the people who dislike files, "filename" 
isn't *strictly* what is required here.  It could also be called a 
"resource name".  And indeed, we can hack around Python's imports fairly 
easily to have it load things from the document store instead of reading 
concrete directories and files (though this may or may not end up being 
useful).  But we *can't* remove the idea of named resources.  You can do 
that in Squeak because it's been built that way, but it's way too far 
from any of the other programming environments to be reasonable.

This doesn't mean we need a global directory structure.  I think it does 
mean we need two things:

* The idea of a bunch of resources collected together.  In the case of 
an activity, that means some source code, some images, the .info file, 
and whatever else.  We've already given this a name: an Activity Bundle. 
  It's important for more than just Activities, but we don't have a name 
or clear idea for what that larger concept is.

* The idea that, inside that bundle scope, things have names.  These 
names might be "activity.info", or "mypackage/mymodule.py". 
Traditionally / indicates hierarchy; but you can also just view them all 
as string identifiers.  The string identifiers are important, of course 
-- mypackage/mymodule.py maps to mypackage.mymodule in Python.  We can't 
choose these identifiers randomly, these need to be explicit and 
persistent identifiers created by the author.

In some cases we *can* create names.  For instance, if you have an HTML 
page and an image (or a Crossmark document and an image), the name of 
the image isn't that important.  But once it gets a name, the other 
document will also get a reference to the name (e.g., in <image 
filename>).  So the name has to be persistent, even as the resources are 
moved around.  It can't be a hash, for instance, nor something that is 
volatile when the bundle is moved around (as some resource-UUID 
proposals use the UUID).  In that case the name is a kind of reference, 
and we need to keep the integrity of that reference and the relation 
between the resources, but the name of the reference is incidental. 
It's just that not all names are incidental.

Ian Bicking | ianb at colorstudy.com | http://blog.ianbicking.org

More information about the Sugar-devel mailing list