[Dev] review of BuildingChandlerParcels

Philippe Bossut pbossut at osafoundation.org
Thu Dec 1 01:03:03 PST 2005


Hi Ted,

First, thanks for the update. The disappearance of the parcel.xml stuff 
makes for a much nicer and clearer read for sure... :)

There are still things that are hard to decipher though. As a lay person 
who hasn't developed a parcel yet, I found some paragraphs hard to 
follow. I've been helped of course by my familiarity with the concepts 
described but I think that it's going to be pretty hard for a newcomer 
to grasp everything. Also, it's almost impossible to follow the code 
snippet without the real code at hand. There's too much or not enough of 
it. For sure, everything that is in the doc should be commented and 
explained. If too far fetched or distracting, it should be simply eluded.

Also, some fundamental aspects should have their own paragraph. As a 
parcel reader, I'm expecting to see a paragraph on creating a Kind then 
one on creating Items very clearly identified. The instantiation of a 
FeedChannel item for instance is buried into the "creating a Menu 
handler" paragraph. That's not where I was expecting it.

Somewhat, I'm wondering if the RSS feed is too difficult of an example 
to use in a Building Parcel documentation. Something that would be more 
static may be (read info in some local file store) would be easier to 
present in extenso and avoid some complexity like threading.

On the good side though, I did learn something reading this doc and I 
think I'm ready to code my first parcel. That's very positive... :)

I also read Alec's doc on Zaobao. It's not finished but I liked its 
style better. I appreciated that all cryptic references to Chandler's 
data (pim, schema.ns) are introduced and explained as they appear in the 
code. It makes the writing of a parcel more approachable. The only 
comments I would have on Alec's doc are grammatical in nature and I 
guess I should simply pick it up and commit changes rather than annoy 
everyone with my comments... :)

Back to the BuildingChandlerParcel doc though, here are the notes I took 
while reading:

- Overview
One should mention that Items are not "owned" by Item Collections and 
can appear in several Item Collections as soon as those concepts are 
introduced. Readers might draw false analogies otherwise (like 
collections are folders...) and build faulty mental models.

- 1. Extending Chandler's Schema
I agree with Alec that making the code more dense (less than 1 screen) 
will help readability. There are important info before and after the 
code snippet and I found myself scrolling up and down to try to make 
sense of the context and the example.
Also, I find the sentence "an Item is just a bunch of Attributes" 
confusing. Especially since the next sentence says that Items have a 
Kind which, somewhat, contradicts the first understanding that items are 
free form groups of attributes. It feels like saying that "a Tree is 
just a bunch of Leaves" but that, really there's a structural difference 
between a Kind "Tree" and a Kind "Heap of fallen leaves" but that, as a 
reader, I'm supposed to know that... It sounds like the first statement 
was not really serious and that some knowledge of what Kinds are is assumed.
I think it would be more clear saying that Items all need to have a Kind 
and that before feeding new data to Chandler, we need to define what the 
Kind of these new data is.
The SuperKind explanation is also confusing. One paragraph says that 
"FeedChannel derives from ListCollection kind" (ok...), a later one says 
that "Feed Item has a SuperKind called ListCollection"... Wait, isn't 
that FeedChannel? I can't find ListCollection anywhere in the code of 
FeedItem... Typo? Hidden assumption?
What's wrong with saying that a Kind can derive from another Kind and 
that all Kinds create a hierarchy with ContentItem at the root? Why use 
the subjonctive "should be used as a root"? Is that it's not really 
true? Are there exceptions?
After reading this first paragraph, my mental model is that:
- Kinds are defined like Python classes complete with attributes and methods
- Items are instances of a particular Kind
- SuperKinds... well... looks like they're just Kinds
This model seems consistent with everything I just read but, if it's 
that simple, why not say so? Obviously, I'm missing something but what?
The rest of the doc seems to proove I'm not mistaken but then, this 
section doesn't make things clear enough. Since readers must be Python 
developers, why not use Python analogies early on so that readers can 
trust their mental model? The analogy between Kind (Python class) and 
Item (Python instances) is only made in the last paragraph of the doc. 
Why wait so long?

2. Periodically getting new RSS items.
The introduction of PeriodicTask is nice but feels intimidating: looks 
like it's just the tip of an iceberg of some fundamental part of 
Chandler that we, as first time parcel writer, we better not look too 
deeply in...
The "behind the scene" paragraph reinforce that impression, especially 
starting with the first mention ever of wxWidgets ("what's that?" will 
certainly be the immediate first time reader's reaction) as if it was 
the main impetus behind suporting threads.
Strangely enough, this section can be better understood reading it 
backwards: from Repository to threads then GUI thread then wxWidgets. 
Starting with wxWidgets as the first word to explain Chandler's 
threading system seems wrong.

3. Creating a menu item
The text sort of gloss over creating an item ("like all the other Items 
we've seen so far") but the only other item created in the doc (so far) 
is a PeriodicTask and in a sort of tangential way. The rest were Kinds. 
I feel the doc should explain a little how an item (an instance of a 
Kind) is created, what it means for the repository, etc... soon after 
Kinds are created. The update() method deserves more than a passing 
mention in the context of the creation of the PeriodicTask.
The event item and how events are dispatched is sort of hocus-pocus. Why 
is FeedController invoked? Is feed_controller and instance of 
FeedController? Frankly, the only way to understand this paragraph is to 
open ./parcels/feeds/blocks.py and peer into the code. There's not 
enough stuff or too much.
The "Behind the scene: CPIA" paragraph is hard to grasp. I understand it 
because I've been exposed to the concepts long enough but I really doubt 
that a newcomer to Chandler will understand any of it. It's mind 
boggling. That being said, it's a tour de force of density of 
information: every single word count in there... :)

Installing an Item Detail View
This is code heavy and most of it must be simply trusted by the reader. 
Obviously, there should be a place where the list of available widget is 
provided. A link to such list would be welcomed here.

Where Chandler is today
The doc says we just learn to populate the repository with new data but, 
actually, we haven't done that explicitely. The FeedItem Kind has been 
defined but nowhere is a FeedItem Item instantiated. This is done in the 
Update() method but, here again, short of checking the 
./parcels/feeds/channels.py code, it's hard to follow reading the doc.

Cheers,
- Philippe

Ted Leung wrote:

> Hi,
>
> Building Chandler Parcels <http://svn.osafoundation.org/chandler/ 
> branches/Chandler_0.6/chandler/distrib/docs/ 
> BuildingChandlerParcels.html> is a revision of this year's PyCon  
> paper <http://wiki.osafoundation.org/bin/view/Documentation/ 
> BuildingChandlerParcels> to reflect all the changes that we've made  
> in 0.6.   The goal of the document is not to be a detail tutorial on  
> how to write a parcel, but to present enough detail so that someone  
> has a general idea of the process.
>
> I'd love it if a few people could take some time to review it and  
> suggest improvements.
>
> Ted
>
>
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> Open Source Applications Foundation "Dev" mailing list
> http://lists.osafoundation.org/mailman/listinfo/dev




More information about the Dev mailing list