presence spec
David Arnold
arnold at dstc.monash.edu.au
Sun Oct 14 14:33:29 EST 2001
sorry this has taken so long, but i've finally got some comments on
draft two of the presence spec.
this morning i hacked up a Python/GTK presence client.
ftp://ftp.dstc.edu.au/DSTC/elvin/epm-0.1.tar.gz
you'll need Python1.6 or later, pe-4.0b1 or later, and PyGTK (i used
0.6.6 happily). this is a slightly difficult combination, since many
Linux distributions still use Python1.5, and pe4 needs 1.6, but ...
for those unable/unwilling to install the required stuff, it's a very
simple UI: a multiple column list showing User, Time, Status and a
combo box below that for your own status text.
at this stage the time display is completely bogus: every 10 seconds,
it adds 10 to whatever value is displayed. i couldn't be bothering
doing it better, since the real intention was to test the protocol.
so, i have a couple of comments to make on the draft spec:
- it's good. thanks Matthew!
- section 3.1, says that the name and domain are case *in*sensitive
strings. are we sure that ignoring case differences are the best
thing to do here? it works for English, but i'm not sure how other
languages/cultures deal with this.
if we're to ignore case, all the example subscriptions later in the
spec are incorrect, since they're not using the fold-case() sub-lang
function.
- in section 3.2, i think the first paragraph could use some
re-wording to make clear that the user's domain is their default
group. Matthew? if you'd like me to send you some text, let me
know.
- throughout the document, i think we would do well to adopt the
IETF's terminology for requirements, as specified in RFC-2119. i
think this would help clarify statements of expectation from
requirements of the spec, etc.
see: ftp://ftp.ietf.org/rfc/rfc2119.txt
- i think some explanation of the requirement for Status-Duration
rather than a timestamp would be worthwhile. the rationale of
machines with broken clocks and timezone challenges is fine, but it
should be in the document.
- section 3.4, step 1 of Frodo's client's actions. the subscription
shown does not illstrate the use of groups in addition to the
default domain-group, nor direct subscriptions to a specified user.
it'd be good to have an example of this more complete subscription
in the spec. one from epm --
require(Presence-Info) && ( \
contains(Groups, "|listen-group-1|") || \
contains(Groups, "|listen-group-2|") || \
contains(Groups, "|example-domain|") || \
User == "extra-user at domain" \
)
note that this is a case-sensitive subscription!
- in section 3.4, in the Presence-Request event, the 'Groups' field is
mandatory.
when requesting information about a non-group buddy, what should i
put in the 'Groups' field? i could put the domain part of the user
name, but that seems redundant?
- in section 3.4, in the Presence-Request event, the 'User' field is
singlular.
this means that i need to send one request for each of
my non-group buddies.
if the 'User' field were to become 'Users' with the same list syntax
as the 'Groups' field, a starting presence client would only need to
send 3 notifications: request for groups, request for users, and its
own new status.
- in section 3.4, in the Presence-Request example subscription, the
'User' field does not contain the domain part of the user's name.
elsewhere in the spec, all 'User' fields contain the fully-qualified
user name.
in epm, i used the fully-qualified name here.
- in section 3.4, in the Presence-Request example subscription, the
'User' field is conjoined with the 'Groups' field. this means that
the example subscription will not receive requests for a non-group
user.
in epm, i altered this subscription to be
require(Presence-Request) && ( \
User == "user at domain" || ( \
User == "*" && ( \
contains(Groups, "|domain|") || \
contains(Groups, "|member-group-1|") || \
contains(Groups, "|member-group-2|") || \
contains(Groups, "|member-group-3|") \
) \
) \
)
- in section 3.4, in the sample Presence-Info reply, the value of the
Presence-Info field contains both the word 'reply' and the unique
reply tag.
do we need the word 'reply' here? i know it's easy enough to match
using contains(unique-tag), but is a simple equality test better?
this would require that the unique tag never be 'initial' or
'update', which is faily easy to implement.
- in section 3.5, the 'User' field specification has issues as
described above.
- in section 3.6, the 'User' field definition does not require the
@-sign or domain to be included. this should be clarified and made
explicit.
- in section 3.6, the 'Status-Text' field definition doesn't
explicitly state whether the example values must be supported by a
client.
as suggested in section 4.1.3, it might be useful to split the
status into a semantic flag, and a displayed text. this would
possibly help with multi-lingual clients also, where, for example,
the use of "Unavailable" as the status might be meaningless.
i'd like to discuss this further.
sorry this is so late, and long. hopefully it's useful!
d
More information about the ticker-dev
mailing list