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
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "Dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/dev