Remember January? Re-live the magic!
Build, Release and QA
---------------------
*Checkpoint*
Bear spins:
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007526.html
Dan tests:
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007533.html
*Tiger compilers*
Jared noted a discrepancy between TigerBuildNotes and the actual
behavior of "make compilers". The documentation says gcc/gcj 4.1 is
expected. Andi noted that the documentation is wrong, 4.0.2 is in fact
the correct compiler to use for Intel Mac OS X.
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007540.html
*PyICU upgraded with charset detection*
Andi upgraded to ICU 3.6 and added wrappers for new charset detection APIs.
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007552.html
*Bug diagnosis*
Andre ran into a repository error, which Grant and Andi recognized as
Bug 7895. Andi had a fix pending.
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007561.html
Dev
---
*Recurrence à gogo*
Grant committed his branch with recurrence work -- improving
recurrence's relationship to triage status, collections, and the
dashboard. Recurring events in the dashboard now present occurrences in
"Now", "Later" and "Done" sections. Changes to a recurring event's
attributes now apply to modifications. (A "modification" is an event
where an attribute was changed and applied to just that event, not the
whole series. Formerly, these were treated as exceptions in the series
and were not modified when subsequent attributes changed). The domain
model changed a bit, such that occurrences no longer store attributes
that have the same values as the master event. Grant wants to look at
removing trivial occurrences (occurrences that are not "modifications")
altogether, in hopes of improving performance.
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007528.html
*Empty added to Repository*
Andi added a NilValue type, which has instances Nil, Default and Empty.
Of particular use is Empty, intended for use as a default value for
collection or ref collection attributes. (This was discussed in an
earlier thread, as a mechanism for avoiding generating lots of empty
lists for items that don't use the attributes). Empty is immutable and
behaves as a null iterator, sequence and mapping. Code that accesses
attributes that use it does not have to check for a value or that it is
not None. Code that changes the collection does have to check for a
mutable collection. More details on usage:
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007530.html
Bryan pointed out that comparing to "Empty" is not the right test for
looking at whether or not the collection has no items (it might be an
empty mutable list, say if the last item has been removed from the
list). Andi agreed, explaining that it is safe to write "item.attribute
is Empty" vs "item.attribute == Empty". Testing for collection
emptiness, better to use len(item.attribute) or just "for blah in
item.attribute:". len(Empty) == 0 and list(Empty) == [].
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007532.html
*Change propagation and the dashboard*
Jeffrey observed that changes to master recurrence items were failing to
fire notifications in the table, at least for read/unread. He noted that
it now works correctly for changes to displayName, after a repository
change.
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007537.html
Andi explained that he changed the order of reaction-to-change
invocations, causing system monitors to happen first, so that indexes
are updated properly.
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007538.html
Bryan, Grant and Andi discussed options. Time-travel to February, where
Jeffrey nicely summarizes the discussion: the repo could be responsible
for a clean propagation of notifications to inherited values, but that
might have a perf hit. Future Jeffrey observed that changing the
displayName somehow causes all occurrences to refresh. What about adding
an explicit Refresh when the dashboard's attribute editor makes a change
to master events?
http://lists.osafoundation.org/pipermail/chandler-dev/2007-February/007701.html
Also of note in this discussion, Grant argues that we're seeing an
instance of a larger problem: findValues(), collection indexing and
notifications should be aware of inheritFrom/To. He asked why have a
higher level, parallel API for findValues() -- are there cases where we
don't want inheritance followed? Andi explains that he'd have to go
check all instances of occurrences to see if they have a new value so
that they don't get false notifications. Andi explained it would be easy
to implement, performance is what he's worried about. Perhaps that would
be mitigated by removing trivial occurrences.
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007545.html
*No data loss*
Jeffrey asked about how ics sharing (webcal, CalDAV) and ics import fits
into our goal of no-local-data-loss. Do we preserve local changes to
events if they conflict with import or ics sync?
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007546.html
*Moving sharing-specific attributes out of ContentItem*
Morgen proposed creating a new stamp: SharedItem. This stamp would take
existing attributes "shares" and "sharedIn" away from ContentItem, and
would manage an item's pending conflicts. One wrinkle: how to avoid the
core pim code having a dependency on the sharing layer?
(isAttributeModifiable needs access to the sharedIn attribute).
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007547.html
After some discussion in the thread and on IRC, Phillip and Morgen
decided to:
- make sharing a stamp
- make ContentItem delegate isAttributeModifiable to stamps
- add a default isAttributeModifiable to Stamp
- sharing code adds/removes Sharing stamp based on sharing status
Phillip suggested that isAttributeModifiable might be able to go away
once we have conflict resolution implemented.
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007550.html
Morgen implemented this strategy, removing sharing-related dependencies
from most core pim code (exceptions explained for timezone and
occurrence code).
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007556.html
Noted interlude, Phillip explained the difference between an Annotation
and a Stamp: a Stamp is an Annotation with extra features:
(1) add() and remove() methods to be explicit about annoation being in
use for particular instances, (2) support for initialValue, set at add()
time, and (3) Stamp(anItem).stamps attribute gives the active stamp
wrappers, has_stamp() function to determine presence of stamps.
Annotations don't need these features because they are always on, not
added and removed. (The data is pretty much the same, but the Stamp
class is needed to access the features).
http://lists.osafoundation.org/pipermail/chandler-dev/2007-January/007551.html
Meetings, Miscellaneous
-----------------------
Apps team meeting:
http://wiki.osafoundation.org/bin/view/Journal/AppsMeeting20070125
Coming soon: February!
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev