XSF Discussion - 2018-12-03


  1. jonas’

    ping

  2. Seve

    pong

  3. Zash

    pong (DUP!)

  4. Ge0rG

    reminds me of the hundreds of Receipts in MUC history.

  5. Ge0rG

    Some clients don't just send Receipts as type=groupchat into a MUC, they also do so on each MUC history sync.

  6. ralphm

    Steve Kille: did we drop the ability to provide channel info / config during channel creation, with the Big Split™?

  7. Steve Kille

    ralphm: it did

  8. Steve Kille

    Core (XEP-0369) has a minimal "create channel".

  9. Steve Kille

    The fancy stuff went into MIX-ADMIN (XEP-0406).

  10. Steve Kille

    Is there a problem wiith doing two ops?

  11. Kev

    I don't think so, particularly, as long as we're careful to default to be maximally closed and open things up via config.

  12. ralphm

    Steve Kille: not nessarily, but you now have to do three requests to create the channel, set the name, description, and then potentially set ownership.

  13. ralphm

    necessarily even

  14. Steve Kille

    Modularity is good

  15. MattJ

    That can't be held as a general truth

  16. ralphm

    And the prose around channel creation says that it “MAY be created with default parameters”, but there is no other way (anymore).

  17. ralphm

    It would be good to explain how to do this by mentioning the info and config topics there (in MIX-CORE), and pointing to the MIX-ADMIN for changing them.

  18. Steve Kille

    I've made a note to sort edits here to clarify things. Unless people are very keen to see a jumbo op

  19. Kev

    Creation and configuration being distinct steps seems to make sense to me. You have to support them as distinct steps, so only doing so seems simpler.

  20. Steve Kille

    my preference too

  21. MattJ

    MUC has a hack to make them not distinct steps (locking)

  22. Kev

    Indeed. I think it's cleaner to avoid the hack.

  23. MattJ

    Agreed. An atomic create+configure is quite sensible in my mind :)

  24. Kev

    Or, at least, that particular hack - if we were going to do it as a single op, hopefully we'd do better.

  25. Kev

    atomic create-and-configure is ok if you have to have create-and-configure. It's not clear to me that we need it for MIX, if we default to closed, hidden channels.

  26. ralphm

    I agree that create+configure makes a lot of sense to. Makes creating a channel less complex for clients (no need to keep state during the creation), and allows for rejecting the creation based on certain configuration or info.

  27. ralphm

    (too)

  28. ralphm

    Unfortunately, because we have also split up form namespaces, you'd now have to either pass in two forms, or use Clark's Notation. :-(

  29. ralphm

    There's also a latency aspect to the multiple steps, especially in mobile settings with low-bandwidth/speed networks.

  30. Kev

    I don't think latency is actually true, there's no more roundtrips, only more stanzas.

  31. Ge0rG

    Isn't it two RTTs vs one?

  32. Ge0rG

    Unless you can configure the MIX before receiving the creation response

  33. MattJ

    I assume Kev means you could optimistically pipeline the config

  34. Kev

    Indeed.

  35. MattJ

    which is not a thing most XMPP libraries will let you do

  36. Kev

    Really? :o

  37. MattJ

    You have a counterexample? I assume Swiften will, or you wouldn't have suggested it :)

  38. Kev

    Anyway. create+configure does have advantages if we get the failure rules right.

  39. Kev

    Swiften will let you send any stanzas you want.

  40. MattJ

    Sure, but can you tell it to send two stanzas "together"?

  41. MattJ

    Oh, you probably didn't mean that

  42. Kev

    Together? No, but you can issue the send in the same call, which means they've got every chance of going out in the same write if they fit, and certainly aren't roundtripped.

  43. MattJ

    Right

  44. Kev

    Create+configure does mean you can avoid the client logic of create, configure, catch the configure failure, destroy the room.

  45. MattJ

    Yep

  46. MattJ

    It's so attractive that I've been pondering over a spec for create+configure in MUC

  47. Kev

    Well, things are a bit worse with MUC to start with. I think if we get the closed-by-default right for MIX, it's /less/ necessary.

  48. Ge0rG

    I've understood the intent, but don't you need the room JID from the create response as a parameter in the configure request? I'm a bit rusty on the MIX protocol details...

  49. Ge0rG

    What's the right incantation to receive the last 50 messages from MAM for a given contact JID?

  50. MattJ

    Ge0rG, filter with=contact-jid and in the RSM put an empty <before/> element as in https://xmpp.org/extensions/xep-0059.html#last

  51. MattJ

    and <max>50</max> of course

  52. Ge0rG

    MattJ: thanks!

  53. Ge0rG

    MattJ: judging from the number of inquiries, this should be added to 0313

  54. ralphm

    Kev: for ad hoc channels you can't pipeline

  55. Kev

    Well whose fault is that? Blame the authors :p

  56. Kev

    So, yeah, create-with-configuration is probably sensible.

  57. ralphm

    Looking at the use cases I have, I would only have ad hoc channels. If you look at e.g. Whatsapp, you'd never know the equivalent of the localpart of the channel JID. For Slack, the channel name (#general) can change over time, so there too, the localpart of the JID would not be something you expose to users. It would probably go in the 'Name' info field.

  58. ralphm

    Kev: Now the question is, how do we put create-with-configuration back in? Would we indeed pass in two forms?

  59. Kev

    I think that's a question I don't have cycles for in the next few minutes, I'm afraid. The addressing/external identifier thing is interesting. We could in principle work entirely with addressing being distinct, and need a lookup, but then that's compexity and no-one likes complexity (until it's a feature they need).

  60. ralphm

    I can imagine that for more traditional cases you'd still want named (non-ad hoc) channels, but I'm not sure. It is mostly a vanity address.

  61. ralphm

    A short name like xsf@mix.xmpp.org is nicer to communicate than 725c9f1d-c653-4715-988c-764e23cd304c@mix.xmpp.org.

  62. ralphm

    (outside of the protocol itself)

  63. Kev

    You need external identifiers.

  64. Kev

    So you need to be able to say "Channel #xsf on server muc.xmpp.org" in one form or another.

  65. ralphm

    Yeah, and if that happens to match the channel JID, that's a nice bonus

  66. ralphm

    Problem is one generally doesn't expect JIDs to change and the systems where you possibly can rename channels (like Slack) are mostly closed ecosystems where you don't have to expose the address.

  67. ralphm

    Of course References could play a role within XMPP, not so much outside.

  68. Kev

    Within XMPP you could say #xsf but have the reference point to aoud.rugadr.gucdant.,udn@muc.xmpp.org, yes.

  69. Ge0rG

    is there a central mapping of XMPP errors to human-readable strings? Properly i18nized? With context for the different places where an XMPP error can happen?

  70. Zash

    There is https://xmpp.org/rfcs/rfc6120.html#stanzas-error-conditions

  71. Zash

    No i18n I'm afraid

  72. ralphm

    Ge0rG: it is also likely you don't really want that

  73. Ge0rG

    ralphm: because I don't want to present understandable error messages to the user?

  74. ralphm

    No, because you generally want your app to understand the error in context and then present something meaningful to a user, if needed. This is almost never want is (mapped from) the error condition itself.

  75. ralphm

    Like `item-not-found` can mean a world of different things depending on the context.

  76. Ge0rG

    Right. So what I want is a map of (situation, error, language) -> human readable string

  77. Ge0rG

    and I'm pretty sure this is interoperable between clients.

  78. jonas’

    yupp, and when you end up in a situation where there is no such mapping entry, you want to show the unlocalized, original error condition so that at least nerds can debug it

  79. Ge0rG

    "XMPPError: not-allowed - cancel" is just not helpful to a normal person.

  80. ralphm

    jonas’: not at all

  81. Zash

    Ge0rG: "ej tillåten" or "verboten" wouldn't be that much better

  82. jonas’

    VERRBOTEN

  83. Ge0rG

    Zash: it would be.

  84. jonas’

    not really

  85. Ge0rG

    at least it would be in the user's language.

  86. jonas’

    and then the user comes into the support room of their client and asks what it means and nobody knows what "ej tillåten" means

  87. jonas’

    and you can’t even tell android folks to run the client with LANG=C

  88. Ge0rG

    jonas’: okay, so I show the translation plus the original XML then :P

  89. Zash

    But *what* wasn't allowed/found?

  90. lovetox

    cant you just add a text node to the error?

  91. lovetox

    if i recall ejabbered does that for many error stanzas

  92. Zash

    That makes it someone elses problem

  93. Ge0rG

    prosody doesn't. But then you need to maintain a map of (situation, error, language) -> human readable string in the server!

  94. Zash

    Prosody does, sometimes

  95. jonas’

    the server might know better than the client what went wrong though

  96. Ge0rG

    Zash: hi there, someone else!

  97. jonas’

    although not in all cases

  98. jonas’

    e.g. PEP

  99. jonas’

    where the server doesn’t know what’s going on either

  100. ralphm

    Localization that way is hard. Now the entities taking to you need to know the language

  101. jonas’

    ralphm, no

  102. jonas’

    you can send multiple languages in <error/>

  103. Zash

    Sometimes there are multiple different causes for the same error (type, condition)

  104. jonas’

    and even if you want to avoid that, you can use the xml:lang on the incoming stanza (which is always present)

  105. Ge0rG

    ...or they need to stuff all languages into the error.

  106. Ge0rG

    > use the xml:lang on the incoming stanza (which is always present) is it?

  107. jonas’

    Ge0rG, yes

  108. jonas’

    it is required on the <stream:stream/>, and transfers from that to the stanzas on routing

  109. lovetox

    i think for most errors it makes totally sense for the server to add a text

  110. lovetox

    and this works fine

  111. jonas’

    For initial stream headers, the initiating entity SHOULD include the 'xml:lang' attribute.

  112. jonas’

    well, SHOULD

  113. Ge0rG

    See.

  114. lovetox

    not-authorized can mean many things, only the server can give a more descriptive error text

  115. ralphm

    I'd still not want to present this to an end user

  116. lovetox

    why not?

  117. lovetox

    it makes no sense to display a generic error message (from the client) that can never hit the point whats wrong

  118. jonas’

    ralphm, in the case of a forbidden MUC join for example, there can be many reasons: - Only members are allowed in this room (and you are not one) - Only folks from this server are allowed in this room - You need a password to enter this room ...

  119. ralphm

    Because you don't control what the other party is putting in there, and the same issue might yields different messages

  120. lovetox

    if i upload a file via httpupload, there are mutliple confitions that maybe prevent me from uploading but all have the same error

  121. lovetox

    not-authorized

  122. jonas’

    and the client cannot distinguish which of those reasons it is, just by looking at forbidden

  123. lovetox

    it doesnt help the user at all if i show a generic text, NOT AUTHORIZED

  124. lovetox

    ejabbered provides the real error in the text translated

  125. ralphm

    jonas’: this is why there's the ability to have application specific error condition elements

  126. lovetox

    there is no better thing really

  127. jonas’

    and thus it’s good if the server supplies this. and the client can show this in addition to its own explanation: "Failed to join group chat. $servermessage"

  128. jonas’

    ralphm, they’re underused though

  129. jonas’

    ralphm, but point taken

  130. ralphm

    Agreed

  131. Holger

    ralphm: The logic is, in theory the other party might provide a bad/misleading error message so better not ever show any of them?

  132. Zash

    Let's just not have errors

  133. Zash

    Let's always succeed! \o/

  134. ralphm

    Holger: support wise yes

  135. Holger

    ralphm: Not my experience.

  136. lovetox

    why ralphm support wise this is gold

  137. Zash

    I think it's sensible to have some way to show the underlying error condition

  138. lovetox

    i can go to the server admin and tell him the exact error message

  139. ralphm

    Most of the time these messages are not actionably by a user

  140. lovetox

    not i got a "not-authorized"

  141. Zash

    It can be behind a long-press or somesuch

  142. ralphm

    That is a great idea

  143. Holger

    ralphm: We added tons of descriptive error messages to ejabberd over the past few months and that helps a *lot* support-wise in practice. If the clients don't hide them.

  144. Zash

    "Something went wrong [show details]"

  145. lovetox

    the point that this trys to solve is, there are 100 different reasons for a error happening, but only 10 types of errors

  146. Holger

    Yes.

  147. ralphm

    Holger: Commendable, but I disagree, unless like what Zash described

  148. Zash

    To some extent, can't you guesstimate the actionability of the error based on the error type?

  149. Zash

    wait/cancel/auth etc

  150. Holger

    Zash's suggestion sounds like a compromise between my point and the one I don't get :-)

  151. Holger

    Zash: Sure, sometimes.

  152. Zash

    What do the great gods of UX say about this?

  153. Holger

    How's the error condition received by the remote party is less likely to be incorrect/misleading than a descriptive error text?

  154. ralphm

    Zash: our UX people usually go with "Oops, something went wrong", unless the app has a better explanation.

  155. MattJ

    For a web app and a server-side error that can be done

  156. ralphm

    Holger: because your error message might be something that doesn't make any sense to a user

  157. Holger

    It's not about making sense to a user but helping support.

  158. ralphm

    And this is where we disagree

  159. Holger

    The trade-offs may well be different for closed systems where you basically just need a timestamp and then check the server logs.

  160. Holger

    Well I'm no good at helping users who report "something went wrong" messages but okay.

  161. MattJ

    I think each point in this conversation depends on exactly what kind of error it is

  162. Holger

    But it's usually an all-or-nothing decision for client developers, I'd assume.

  163. Zash

    MattJ: error.type = cancel | modify | auth | wait ?

  164. MattJ

    Either it's actionable by the user, by the service admin, by the client developer, or possibly even the server developer. Otherwise a temporary technical problem.

  165. MattJ

    Zash, exactly (if those categories map cleanly)

  166. Zash

    MattJ: Hopefully they'll map to whether the user should wait or give up or do something

  167. MattJ

    Well "wait" is clear enough that it's a temporary issue that can be fixed by retrying, indeed

  168. MattJ

    The others are more vague

  169. MattJ

    and all this of course depends on entities setting the type correctly :)

  170. Zash

    "Something went wrong, {wait:try again later; auth:you're not allowed to do that, Dave; cancel: sorry, that won't work."

  171. Zash

    MattJ: Don't forget that it depends on XEPs not mandating weird error conditions for things

  172. lovetox

    see best example is "wait"

  173. lovetox

    httpupload server mod says you reached your quota

  174. lovetox

    you have to wait one day

  175. lovetox

    this can be in a error text

  176. lovetox

    "A temporary problem" doesnt help the user at all

  177. MattJ

    Yes, agreed

  178. MattJ

    I'm a big fan of <text>, and strongly disagree with the spec when it says it shouldn't be displayed to the user

  179. MattJ

    In the past that may have been sensible, but I try to choose sensible error texts whenever possible

  180. Ge0rG

    The errors I run into don't have error texts at all.

  181. lovetox

    the best is the forbidden error in combination with MUCs

  182. lovetox

    Gajim just had its own text for that, it always displayed "You are banned from that room"

  183. lovetox

    :D

  184. MattJ

    The not-acceptable one? Yeah, if Prosody doesn't send a <text> with that, it should

  185. MattJ

    It's been on my todo to investigate for a while

  186. Ge0rG

    Also no text when you send a message to a MUC you are not in, or when you try to add yourself to your roster.

  187. Zash

    Ge0rG: Have you tried sending a presence probe to yourself;

  188. Zash

    Ge0rG: Have you tried sending a presence probe to yourself?

  189. Ge0rG

    Zash: no

  190. Alex

    Memberbot is ready for you guys again ;-)

  191. edhelas

    https://old.reddit.com/r/opensource/comments/a2u54g/hey_tumblr_users_here_is_why_movim_could_be_the/