Hello Gunnar,

Thanks for your comments about XEP-0301 In-Band Real-Time Text:


On Tue, Apr 9, 2013 at 2:02 AM, Gunnar Hellstrom <
gunnar.hellst...@omnitor.se> wrote:

>  It is good to see a new version of the XMPP Real Time Text extension.
>
[snip]

> On 2013-04-08 17:47, XMPP Extensions Editor wrote:
>
URL: http://xmpp.org/extensions/xep-0301.html
>
[/snip]



The general impression is that it is in a good and mature condition.
> I have a couple of small comments.
>
> 1. Erasure over message border.
> In 4.6.3.2, it is said about the Erase element:
> "Note: Excess backspaces MUST be ignored. Thus, text is backspaced only
> to the beginning of the message, in situations where n is larger than p."
> This can be perceived in three ways. Support of XEP-0308 for last message
> correction may change the situation a bit.
>
> 1. Seen from the transmitting user perspective, with XEP-0308 support,
> backspacing over the message border may be the natural way to return to the
> previous message and make a small correction.  Without XEP-0308 support,
> the statement is true.
>
> 2. Seen from the transmitting client perspective. If XEP-0308 is
> supported, then a user backspace at the beginning of the message should not
> be ignored, but instead activate last message correction, providing a
> <reset/> and start acting in the previous message. IF XEP-0308 is not
> supported, then the statement is true.
>
> 3. Seen from the receiving client perspective, the statement is true.
> "Excess" backspaces shall be caught by the transmitting client and either
> ignored or caused to generate the move to the previous message before
> continuing to erase, depending on XEP-0308 support.
>
> I suggest that the XEP-0308 influence is kept largely isolated to section
> 6.6.3 and therefore no discussion on its influence put in here.
>

This proposed change would increase client complexity (on average) for BOTH
the sender and recipient.  Not good.
For XEP-0308, senders should break a long backspace sequence into multiple
<rtt/>, one for current message, and one for previous message.
This is simpler and isolates complexity only to senders.

See this section to understand why your change is bad:
http://xmpp.org/extensions/xep-0301.html#usage_with_last_message_correction

1. Refer to previous discussions, many hours were spent (in two different
months, I believe) discussing over:
- XEP-0301 and XEP-0308 sent to clients that only support XEP-0301
- XEP-0301 and XEP-0308 sent to clients that only support XEP-0308
- Etc. (I often listed 5 situations).
To prevent refreshing people's memory yet a third surge of messages in a
row; search this mailing list for previous "XEP-0301 + XEP-0308"
discussions and read the big message-surges on this matter.  We ended up
mostly agreeing disco should prevent such things, and maybe it won't be
used mixed in group chat (but the ability is there anyway to use XEP-0301
and XEP-0308 safely in a mixed-mode manner in a groupchat, in theory -- if
an implementer REALLY wanted to do so).  I like a robust standard that can
degrade gracefully in as many situations as possible.
The way it's coded right now, already maximizes 'reasonable' fallback
behavior.
The suggested change would break this elegance that was already discussed.

2. Last message may not exist on recipient.
See "Keeping Real-Time Text" synchronized for some cases where this can
happen:
http://xmpp.org/extensions/xep-0301.html#keeping_realtime_text_synchronized
Theoretically, the sender could try to monitor for some of these (but not
possibly all), but that's additional complexity on both the sender and
recipients.
It is simpler the way they are currently, the XEP-0301 requires a Message
Refresh everytime you go back to the previous message, so that recovers the
previous message (even if it may be handled as a current message due to an
'id' parameter pointing to a missing message).  The behavior becomes more
predictable with the existing specification in this edge case, and the
proposed change would worsen this inconsistency.

3. Message #1, #2, #3 was sent, but recipient only has message #1 and #3
(see "Keeping Real-Time Text Synchronized" again).  This would cause
backspacing into the wrong message.   The proposed change is
non-deterministic, while my current spec is currently more deterministic.
 This is because the XEP-0301 spec requires an "id" attribute referencing
the correct message to modify.  A recipient would realize that #2 is
missing and either blindly treat missing id's as a message correction to
the current message (graceful fallback behavior, because of the Message
Refresh eliminates conflict between the two messages; I already explained
the graceful fallback behavior) or re-populate the message immediately
preceding (another possible behavior).   Again, XEP-0308 requires a message
refresh on the correct message "id" so message #2 would reappear one way or
another.  So in such situations it would behave as a
message-switching-in-place between the previous message and the next
message.

If we just let senders handle the complexity of breaking long backspaces
into two, here's an example of graceful fallback behavior in an XEP-0301
recipient that has a missing Last Message, following current XEP-0301 and
XEP-0308 to a tee, this is what would happen: As the sender backspaces to
previous message, this is what happens on the recipient side: The full copy
of current real-time message instantly changes to a full copy of the
previous message (not already existing on recipient anyway) because a
message refresh was sent as required, edits made while they are received,
then when finished a <body> is received which re-commits the previous
message that didn't already previously exist and now the previous message
exists permanently, the newer real-time message instantly reappears
(message refresh was sent, as required), edits continues, and then commited
as <body>, now two permanent messages in a row, exist on recipient instead
of just one (the missing message essentially "came back").  The sender
didn't know the last message was missing from the recipient.  Nor did the
recipient know there was a last message.  Yet it still worked because the
current protocol was followed!  This is GRACEFUL fallback behavior.  Some
*minor* UX problem (real-time message buffer refreshing in place
back-and-fourth a copy of last message and a copy of current message), but
no text corruption occurs.  Corruption is MUCH WORSE than this graceful
fallback behavior.

My proposal is to keep things the way they are, the sender clients simply
break long sequences of excess backspaces into two separate message
stanzas, one with <rtt/> (without an "id" attribute) addressed to the
current message, immediately followed by another <rtt/> (with an "id"
attribute) to modify the previous message.   This will maximize backwards
compatibility.  Recipients SHALL continue to ignore excess backspaces
within the same <rtt/>.   We prefer that the complexity remain in the
sender (handling breaking backspaces into separate messages), rather than
the recipient (figuring out wrapover for excess backspaces), to maintain
maximum backwards compatibility & protocol elegance in unusual & adverse
edge cases.

In fact, it brings up a new discussion too: Whether or not to commit the
current message first using a <body> in between the message stanzas, once
backspacing for current message is finished.  The way the spec works right
now is skipping doing so, would still degrade gracefully (reasonable
fallback behavior of message switching) regardless of whether this was
done.  The UX probably would be better if the <body> was sent, but "at the
end of the day" you essentially have the same result once the sender
finished both messages (two complete permanent committed messages).



> Instead, if anything shall be done, I suggest to just insert words "by the
> receiving client", so that the note reads:
> "Note: Excess backspaces MUST be ignored by the receiving client. Thus,
> text is backspaced only to the beginning of the message, in situations
> where n is larger than p."
>
> 2. Risk for excessive lag.
> In "6.5 Receiving Real-Time Text", I think this text is scaring:
> "In processing Element <w/> – Wait 
> Interval<http://xmpp.org/extensions/xep-0301.html#element_w_wait_interval>,
> excess lag in incoming real-time text might occur if multiple delayed
> <rtt/> elements suddenly get delivered"
>
> I think that in most applications, the users prefer rapid presentation
> over exact replication of timing of typing.
> An easy way out is to be just a little bit more prescriptive:
>
> "In processing Element <w/> – Wait 
> Interval<http://xmpp.org/extensions/xep-0301.html#element_w_wait_interval>,
> excess lag in incoming real-time text might occur if multiple delayed
> <rtt/> elements suddenly get delivered (e.g. congestion, intermittent
> wireless reception). Recipients should avoid excess sustained lag by
> monitoring the queue for excess <w/> action elements (e.g. unprocessed <w/>
> elements from more than one <rtt/> element before the latest received )
> and then ignoring or shortening the intervals in <w/> elements. This allows
> lagged real-time text to "catch up"  quickly."
>

This is a reasonable change.



> These two comments are on a level that could be left without action. I
> think that the draft is good now and can be taken through last call as was
> discussed already for the previous version.
>

I would like people's opinion on the brand new "4.3 Processing Rules"
section:
http://xmpp.org/extensions/xep-0301.html#processing_rules
It actually significantly shortened/simplified the "4.2 RTT Attributes"
section
http://xmpp.org/extensions/xep-0301.html#rtt_attributes
It recently helped some implementers (including one from Gallaudet
University who just joined this mailing list).
But, it needs far more peer review, and it feels somewhat redundant to some
text already in "4.7 Keeping Real-Time Text Synchronized"
http://xmpp.org/extensions/xep-0301.html#keeping_realtime_text_synchronized
However, some people don't say it's redundant.

Thanks,
Mark Rejhon

Reply via email to