XSF Discussion - 2019-08-22


  1. jonas’

    what has time to do with that?

  2. Daniel

    Yes you need to start mam or get the last if *before* you send presence

  3. Daniel

    Yes you need to start mam or get the last ID *before* you send presence

  4. Daniel

    Don't think carbons have anything to do with that

  5. jonas’

    you could enable carbons before sending presence, too

  6. jonas’

    but don’t you need to to MAM *after* sending presence/enabling carbons to not lose a message?

  7. jonas’

    otherwise, if you got the last ID / queried MAM *before* sending presence, a message might’ve arrived between querying the ID and sending presence/enabling carbons, which you’d then miss

  8. Daniel

    Mhhh ideally then you'd get the last ID before presence but fire the query after

  9. jonas’

    sure

  10. jonas’

    no, wit

  11. jonas’

    *wait

  12. jonas’

    if you get the last ID before presence, what happens if a message arrives between you getting the last ID and you sending presence?

  13. Daniel

    jonas’: last ID defines the lower end

  14. jonas’

    what does "lower" mean in that context?

  15. Daniel

    Upper end is undefined

  16. jonas’

    is last ID the last thing you saw in your last session?

  17. jonas’

    or is last ID the newest ID?

  18. Daniel

    Yes

  19. Daniel

    The newest you currently have locally

  20. ralphm

    But you won't get newer messages until you sent presence.

  21. jonas’

    Daniel, I see!

  22. jonas’

    that makes sense then

  23. jonas’

    it’s early in the morning, sorry :)

  24. ralphm

    Daniel: if you're saying there's a specific order of events that ensures you get all messages, is that documented somewhere?

  25. ralphm

    Like: get last id, send carbons request, send presence, request mam?

  26. ralphm

    Because XEP-0313 says client sync is it of scope (!), and refers to bind2.

  27. ralphm

    out of scope

  28. Ge0rG

    ralphm: an attempt was made to document it in 0313, but it turned out not to work.

  29. Daniel

    what didn’t work?

  30. Daniel

    the attempt?

  31. Ge0rG

    Daniel: the actual ordering that was written down, I think

  32. ralphm

    Ge0rG: so is there an order that does work? Or can it not be solved with current protocols?

  33. Daniel

    the order that ralphm just wrote down doesn’t work?

  34. Ge0rG

    So you note the last id you know, send presence, and then fetch MAM in parallel to receiving offline messages / live traffic? Is there any change to sync linearly in the actual message order?

  35. ralphm

    I believe that the order I mentioned is at-least-once. There's no such thing as exactly-once in general.

  36. Daniel

    well receiving MAM and offline messages in parallel isn’t that bad; you can dedup them

  37. Holger

    Right, there's no way to avoid dedup.

  38. Daniel

    however when i detect that MAM preferences are set to always and server has offline msg mangament things i also run a purge

  39. Daniel

    before sending presence

  40. Holger

    … which can reduce the number of messages to dedup, yes.

  41. Daniel

    but i see that only as a minor traffic optimization

  42. Ge0rG

    You also need to dedup between the Carbons of live messages that arrived between you enabling Carbons and you sending presence, and their respective offline copy

  43. ralphm

    Daniel: is the filter for messages going to MAM and offline identical?

  44. Ge0rG

    ralphm: probably not

  45. Daniel

    my dedup would work fine; and does on servers that don’t have the purge thing

  46. Daniel

    ralphm, i guess there is nothing in the protocol to ensure that

  47. ralphm

    Ge0rG: you don't get carbons until you send presence

  48. Ge0rG

    Daniel: if you purge offline, isn't there a chance that you'll purge too much?

  49. Ge0rG

    ralphm: are you sure?

  50. Daniel

    Ge0rG, well my reasoning is if it doesn’t end up in MAM it wasn’t important

  51. Daniel

    your second client wouldn’t receive it either

  52. ralphm

    That's the idea. Before sending presence, you only get message stanzas directed at your full JID.

  53. Daniel

    i mean if the rules between offline messages and mam differ it is probably time to reconsider the rules

  54. Ge0rG

    ralphm: I don't see presence mentioned in 0280: > When the server receives a <message/> eligible for carbons delivery addressed to a client JID (either bare or full), it delivers the <message/> according to RFC 6121 § 8.5.3, and then delivers a forwarded copy to each Carbons-enabled resource for the matching bare JID recipient that did not receive it under the RFC 6121 delivery rules.

  55. Daniel

    but if you hate the purge don’t purge

  56. Daniel

    that's not something i would codify anywhere

  57. Daniel

    especially since purge capability isn’t really widespread anywhere

  58. ralphm

    Ge0rG: hmm, that surprises me. Curious how servers implement this then.

  59. jonas’

    I’m pretty sure that some people use carbons-enabled clients with negative priority to get all messages (also) on a non-carbons-enabled client :)

  60. Ge0rG

    Daniel: I remember complaining about a race condition there, but I can't say right now what it was

  61. Ge0rG

    jonas’: I'm doing that, but a negative presence still is a presence

  62. ralphm

    Right

  63. ralphm

    Just for my information, though, the only upshot of that combination (negative presence and carbons) is that you don't get message stanzas to bare JID that don't match the carbon criteria?

  64. ralphm

    I'm curious in what situation that is beneficial.

  65. jonas’

    ralphm, the non-carbons-enabled client will get all the messages because it’s the only one with >= 0 priority

  66. jonas’

    while the carbons-enabled clients also get the messages because they’ve enabled carbons

  67. ralphm

    But only of type chat, for example.

  68. Holger

    So just a trick to get carbons behavior with n clients although only n-1 clients support carbons.

  69. jonas’

    "good enough"

  70. ralphm

    Hmm

  71. Daniel

    not that implementing carbons in a client is hard…

  72. ralphm

    It is interesting though. Most clients use presence priority to figure out which 'show' to display.

  73. ralphm

    So in this setting that might mislead

  74. ralphm

    Obscure edge case, maybe

  75. Holger

    Yes.

  76. ralphm

    Any way, I think that servers will still wait for presence to start sending any messages.

  77. ralphm

    (that were not to this connection's resource)

  78. lovetox_

    It does not matter in what order you activate carbons, presence, offline messages

  79. lovetox_

    you can never miss a message if you do MAM last

  80. lovetox_

    thats the easy way, that might have here and there some message that has to be deduped

  81. lovetox_

    but thats no problem with stanza.-id

  82. ralphm

    lovetox_: what was said is that before sending all that, you need to establish the last id you have.

  83. ralphm

    The rest of the order is less relevant, although there might be an optimum to minimize traffic of dupes.

  84. lovetox_

    you have the last ID in your database

  85. ralphm

    Yes, you just need to make sure you don't invalidate it by getting new messages before doing MAM

  86. lovetox_

    yes of course, before MAM catchup is not complete you should not record "last stanza id"

  87. lovetox_

    and MAM catchup will always give you the very last message

  88. ralphm

    That was the thing we tried to convey

  89. ralphm

    I'm still curious as to why it is said to be out of scope and mentions bind2 as possible remedy.

  90. flow

    So is it guaranteed that servers don't mix in live messages while sending MAM messages?

  91. ralphm

    flow: I don't think so

  92. ralphm

    That seems complex to implement

  93. jonas’

    ralphm, I think the idea was to have a single sync point where you get the ID of the most recent message in your MAM (or possible multiple IDs based on the sender JID) and enable carbons and message delivery in a single server-atomic operation

  94. jonas’

    removing the need to deduplicate there

  95. Ge0rG

    Yes, essentially you need an atomic operation where you enable live traffic and receive the ID of the last non live message

  96. Ge0rG

    So that you can fill the hole.

  97. Ge0rG

    But there is no way to actually receive what you need in a linear order.

  98. jonas’

    true

  99. Ge0rG

    and there is no way to receive the messages exactly once.

  100. lovetox_

    flow why would it make a difference if a server mixes in live messages?

  101. jonas’

    Ge0rG, with bind2, there would be, or?

  102. Ge0rG

    jonas’: maybe

  103. jonas’

    "maybe"?

  104. Ge0rG

    jonas’: if bind2 also removes all MAMed messages from the offline history sync

  105. jonas’

    in my world, offline messages do not exist and you always purge them.

  106. ralphm

    jonas’: that sync point seems to be when the server receives presence

  107. jonas’

    ralphm, it’s not a sync point, because you don’t get the "newest MAM ID" from that

  108. jonas’

    (you = the client)

  109. ralphm

    It is a sync point for live messages

  110. jonas’

    how is it sync if it’s one-way?

  111. ralphm

    Well, sure you still need to do the mam query afterwards. I don't see how one can technically achieve exactly once.

  112. jonas’

    ralphm, if the server replied (to the presence, or to whatever) with the ID of the most-recent stanza in the MAM archive at the time the presence was received

  113. jonas’

    then you’d query from "last stanza ID I’ve seen" until "most-recent stanza ID I got from presence"

  114. lovetox_

    you dont record that jonas

  115. jonas’

    lovetox_, ?

  116. lovetox_

    you dont record last-stanza-id until you made your mam query

  117. lovetox_

    and while the mam query is running you ignore all stanza-ids from live and carbons

  118. ralphm

    From a client perspective they'd be ideal. I don't think that's easy to implement server side. Also, exactly once delivery is theoretically impossible.

  119. lovetox_

    you only look at the mam query

  120. jonas’

    ralphm, sure.

  121. lovetox_

    the last message in the mam query, is your most recent message, then you record the stanza-id

  122. lovetox_

    and then you are fully synced

  123. lovetox_

    and it does not matter what the server sends you inbetween your mam query

  124. jonas’

    if you don’t want to be efficient, sure.

  125. ralphm

    I've also seen MAM implementations that were eventually consistent, by the way.

  126. lovetox_

    yes jonas thats what we were saying

  127. ralphm

    (server side)

  128. lovetox_

    and nobody needs to be efficient here, mam is complex enough

  129. lovetox_

    a few duplicates are not bad, its totally fine

  130. lovetox_

    and you can now overengineer that so there will never be a message twice, but its not an "issue" of clients that we are so inefficient because we get 3 offline messages while mam query

  131. lovetox_

    and btw you have the same thing with MUC

  132. lovetox_

    live messages will arrive while you query mam

  133. ralphm

    Oh, don't get me started on MUC or MIX.

  134. lovetox_

    i would argue this was a problem back in mam:0 mam:1 days

  135. lovetox_

    if you could not depend on stanza-id

  136. lovetox_

    now with mam:2, really i dont care about a handful of duplicates in a mam catchup

  137. ralphm

    Sure.

  138. ralphm

    Problem with group chats is that you have to do it for each room.

  139. ralphm

    And although MIX currently says you should also store in your local archive (which I like, as it decreases client complexity), it is unclear how a server catches up to the room archive in case of delivery issues (e.g. s2s outages).

  140. lovetox_

    ralphm what is the problem with making a query to each MUC? inefficient?

  141. lovetox_

    yes maybe i can spare 20 stanzas, for 20 muc joins, but other than that, this just works

  142. lovetox_

    if i switch now to some other concept, like you just decribe and for that get real problems like s2s catchup etc

  143. lovetox_

    i would stay with the old behaviour

  144. Daniel

    Oh I didn't know that the server was supposed to catch up on your behalf. I thought you were just going to miss messages

  145. Daniel

    Or magically know where the gaps are

  146. Ge0rG

    lovetox_: on mobile clients, it makes sense to reduce: round-trips, wakeups, data bandwidth

  147. lovetox_

    yes, i have to trust you on that

  148. lovetox_

    though i would say mobile clients with stream management should not run to often into the, total connection reset scenario

  149. Daniel

    Ge0rG, well you'd do mam and join at the same time. so it's not more roundtrips or more wake ups

  150. Daniel

    all it does it redcue traffic

  151. Daniel

    which is fair

  152. ralphm

    Daniel: well, let's say it is unclear. The reason I dislike having to check each channel for its archives, is that it doesn't scale. If you want to implement something like Slack, you can easily be in 40+ channels. In WhatsApp, my daughter is in uncountable ones that are never left.

  153. Ge0rG

    ralphm: yes, we need a way to start a session by just telling the server "my last local ID is X, give me everything relevant after that"

  154. Daniel

    ralphm, depends on what you want to scale and how it is implemented server side. send a message to a group of 500 people - you might not want to store it 501 times in different MAM archives

  155. Daniel

    especially not in 501 transactions

  156. ralphm

    Daniel: I strongly believe that the collective archive of all my conversations should be as close to me as possible. I.e. my own server.

  157. ralphm

    I'm sure there are server side optimizations that could be done.

  158. Ge0rG

    Daniel: having 501 archives wasn't a problem for the designers of MIX

  159. Daniel

    Ge0rG, yes we are talking about mix

  160. Daniel

    (or muc/sub which does similar things for that matter)

  161. ralphm

    I mean we are also sending 501 copies over the wire.

  162. Daniel

    ralphm, i get that. i'm with you on that. however if we don’t change how MAM is currently implemented it will trigger 501 transactions

  163. Ge0rG

    Daniel: I think the only actual efficiency problem about MIX is that you end up with 501 copies of each message, with 490 accounts being abandoned by their owner

  164. ralphm

    Even if participants are on the same server. And not counting c2s copies

  165. Daniel

    which is actually a problem we are running into on one project

  166. Ge0rG

    Daniel: a server implementing both the MIX and the account domain could use the same archive table, and just remember for each account when it last joined

  167. ralphm

    If the problem is retention, then there are two ways: limit in time/space, or pay for storage.

  168. Ge0rG

    speaking of MAM, where are MUC-PMs stored?

  169. Daniel

    for us it was not necessary the storage but the throughput

  170. Daniel

    501 transactions are expensive

  171. Ge0rG is still struggling with the right SQL query to obtain the last-stanza-ID for MAM sync

  172. ralphm

    Daniel: did you see my 'eventually consistent' remark above?

  173. Daniel

    ralphm, your point being we just have to do it anyway?

  174. lovetox_

    Ge0rG on your account MAM

  175. lovetox_

    if this was the question

  176. Ge0rG

    lovetox_: yes

  177. lovetox_

    only type=groupchat is in the MUC archive, usually on current servers

  178. ralphm

    Daniel: I'd prefer to have one, complete, archive per user, and only use room archives to catch up with pre-join history, but I'm not sure if this is possible. It would surely involve backfilling, and I think that's at the very least undefined, and impossible at worst, with the way MAM is designed right now.

  179. Daniel

    yes you get your PMs from your normal catchup

  180. Daniel

    ralphm, yes to all that

  181. Daniel

    and also rather expensive with the way MAM is designed right now

  182. Holger

    Availability of room history is deemed critical enough to dive into the headaches of maintaining local copies even though availibility of the room service itself isn't considered critical enough to distribute it across domains?

  183. Daniel

    did someone say matrix?

  184. Holger

    So we get the cons of Matrix without the pros?

  185. Holger

    Hah.

  186. Holger

    Not sure we need to agree on a model though. I guess local MIX archives can remain an optional feature without introducing trouble?

  187. Daniel

    as long as it is advertised and clients know what to do

  188. lovetox_

    Holger just out of interest how many messages does the conversations.im server MAM archive contain currently ?

  189. Daniel

    alot.jpg

  190. lovetox_

    i think you have no MAM storage time limit on that server if i remember correctly

  191. Daniel

    we do; because we ran out of disk space :-)

  192. lovetox_

    haha 😃

  193. Holger

    This came totally unexpected.

  194. ralphm

    Holger: sure, Matrix solves some these issues, but I believe they haven't tackled group scalability fully yet, and if we're talking about possibly having dimensions in MAM archives for reactions, edits, and other attachments to messages, I am not sure it handles that well at all.

  195. ralphm

    Having just a dag of commits is not great in that respect

  196. Ge0rG

    couldn't an account server "cheat" by just forwarding all MAM queries to the MIX service?

  197. jonas’

    Ge0rG, only if you were to filter by the MIX service

  198. jonas’

    my understanding is that a normal MAM query would give you MIX and non-MIX messages interleaved

  199. ralphm

    Ge0rG: that might not complete in a reasonable time, and still leave you with gaps?

  200. ralphm

    What jonas’ says

  201. Daniel

    also how would your server know the relevant stanza-id of the mix service

  202. Ge0rG

    Eww.

  203. Ge0rG

    Right. So many problems.

  204. ralphm

    As I said, this is not easy

  205. ralphm

    By the way, somebody remarked it being ok to send MAM along with join, but join is a one time thing in MIX. After that your server will just send presence.

  206. Ge0rG

    that remark was about MUC

  207. ralphm

    Ok

  208. Ge0rG

    If only we had threads.

  209. ralphm

    😭

  210. jonas’

    is this the "Can of Worms" day?

  211. Ge0rG

    So to sum it up: Carbons and MAM are ugly workarounds to make an unreliable message "delivery" protocol more reliable, and MIX is codifying those workarounds without solving the actual reliability problems?

  212. Ge0rG

    jonas’: like every day.

  213. ralphm

    Ge0rG: maybe.

  214. Ge0rG

    So I need to have a flag for type=groupchat messages, to exclude those from the last-id-query, while retaining other-typed messages from MUC JIDs, like invitation and invitation rejection.

  215. Daniel

    yes

  216. Ge0rG

    And I need a DB index on that flag.

  217. Daniel

    or do the gajim where you store the last mam ids seperatly

  218. Ge0rG

    What could possibly go wrong with that?

  219. Daniel

    probably the same amount of things that can go wrong with your approach

  220. Daniel

    only different things

  221. Ge0rG

    I'm still wondering, given a set of IDs, how do I determine which one is last?

  222. Ge0rG

    The anticipated answer is: I can't, I need to know from the context

  223. Daniel

    the gajim way(tm) also gives you the ability to remove messages locally while still making the catchup work

  224. Daniel

    and not re-fetch a deleted message

  225. Daniel

    there are forked versions of Conversations that do the gajim for that purpose

  226. Ge0rG

    Yeah, that makes some sense.

  227. lovetox_

    Ge0rG i would suggest to hold the last stanza id per jid, in a separate table

  228. lovetox_

    and yes stanza-id has no order

  229. Ge0rG

    lovetox_: is there anything else one should put into that table?

  230. lovetox_

    so just from the id you cant determine if its the highest or lowest

  231. lovetox_

    its opaque

  232. Ge0rG

    lovetox_: you update that table when you finish a MAM query?

  233. lovetox_

    no on every MAM message

  234. lovetox_

    so if the catchup breaks up or my client crashes

  235. Ge0rG

    lovetox_: on every in-order MAM message? Or are all your MAM messages in-order?

  236. lovetox_

    i dont have to refetch

  237. Ge0rG

    Sigh. I wish MAM would go away and server would just track the last delivered message per client resource.

  238. Ge0rG

    it would be so easy with 0198, at least for the sake of full-sync clients

  239. lovetox_

    i contact you later Ge0rG with the db schema and what i store, must go now

  240. Ge0rG

    lovetox_: thanks!

  241. flow

    lovetox_> flow why would it make a difference if a server mixes in live messages? I guess it depends if a live message triggers something that touches the processing of the incoming MAM archive messages. I was just wondering what people think about that

  242. ralphm

    For me Gajim never seems to properly retrieve / show MUC history after coming online.

  243. Ge0rG

    What's the status of the Badges poll, BTW? I'd _really_ like to know the results.

  244. lovetox_

    ralphm this works. but it only shows what you missed

  245. lovetox_

    so if you join twice, all history messages are in the history window CTRL + H

  246. Ge0rG

    what is a history window and why should it even be there?

  247. lovetox_

    a windows where history shows

  248. lovetox_

    a windows where you can browse history

  249. lovetox_

    search filter etc

  250. Ge0rG

    I never understood that. I want the history in the respective chat tab, with a dynamic filter if possible

  251. lovetox_

    i want that too but i have not time to do it 🙂

  252. lovetox_

    as you may know Gajim is 15+ years

  253. Ge0rG

    Yeah.

  254. lovetox_

    and dynamic history loading in the same window was not a thing 10 years back

  255. Daniel

    Also people weirdly love that

  256. Ge0rG

    which reminds me. Tomorrow is yaxim's 10th birthday.

  257. Ge0rG

    Daniel: people love the history window?

  258. Daniel

    Yes

  259. Ge0rG

    Weird indeed

  260. Holger

    You just know weird people.

  261. jonas’

    most people are weird

  262. lovetox_

    also displaying only in the chat window is not a solution for all circumstances

  263. Ge0rG

    lovetox_: now I'm curious

  264. lovetox_

    i may want to look at history with contacts that are not in my roster anymore

  265. lovetox_

    or MUCs i dont want to join anymore

  266. lovetox_

    having it *only* in the chat has drawbacks

  267. Ge0rG

    lovetox_: what's wrong with displaying those in the respective chat tabs, without joining?

  268. lovetox_

    this means i have to have a concept of all mucs i ever joined, must be able to open them and look at history *without* joining

  269. lovetox_

    and how do i know if the user wants to only look at history or want to join=?

  270. lovetox_

    etc etc

  271. Ge0rG

    Yes.

  272. lovetox_

    this is of course the easy thing for 90% of all use cases

  273. Daniel

    And space bar heating

  274. Ge0rG

    Yesterday I ran hashcat on my laptop's Intel GPU. There was a frightening smell of something burnt. And space bar heating.

  275. lovetox_

    Ge0rG : what i save in the table is, archive_jid, last_mam_id, last_timestamp

  276. lovetox_

    i save the timestamp because i ran into the following problem

  277. lovetox_

    client is turned off 2 weeks, i join a muc and i need to know that the last mam id is 2 weeks back, because i dont want to request that many messages

  278. lovetox_

    so i can now switch to a timebased query, like give me last 2 days

  279. lovetox_

    i apply this only to public mucs

  280. Ge0rG

    interesting, thanks

  281. Ge0rG

    lovetox_: is archive_jid the JID of the MAM service? Do you have your own domain in there for account MAM?

  282. lovetox_

    yes

  283. lovetox_

    no

  284. lovetox_

    its just the jid of the archive

  285. lovetox_

    and yes my own jid is in this table

  286. lovetox_

    but i apply different rules to account mam query, i always request everything there, except on very first start

  287. Ge0rG

    what do you request on first start?

  288. lovetox_

    i think 7 days

  289. lovetox_

    but i have a button in gajim, that lets you sync any timeperiod before

  290. Ge0rG

    into the history window? ;)

  291. lovetox_

    yes

  292. lovetox_

    this is not a button per chat

  293. lovetox_

    this is a account button, sync everything, last 6 months, last 3 months

  294. lovetox_

    like one time shot, after setting up a client, do i want to have my whole archive locally or not

  295. lovetox_

    users sometimes want to test something and set up a new instance etc, in this case i dont want to download 10.000 messages

  296. nyco

    time?

  297. ralphm bangs gavel

  298. Guus

    I'm just being called

  299. ralphm

    0. Welcome + Agenda

  300. Guus

    I'll lurk for the duration of this call

  301. ralphm

    Hi all!

  302. nyco

    so we're 2.5?

  303. nyco

    is it a quorum?

  304. ralphm

    hehe, not yet

  305. ralphm

    Seve and MattJ will surely show up

  306. Guus

    I'm afraid this is going to take a while

  307. Guus

    customer on the phone

  308. ralphm

    Guus: no worries

  309. nyco

    for a good or a bad news?

  310. MattJ

    Hey

  311. nyco

    cool

  312. ralphm

    There we go.

  313. Guus

    unsure

  314. Guus

    count me out guys, sorry

  315. MattJ

    Sorry, I honestly didn't know it was Thursday :)

  316. ralphm

    1. Minute taker

  317. ralphm

    MattJ: happens roughly every 7 days

  318. MattJ

    I'll make a note of that

  319. nyco

    or every 14 days

  320. nyco

    I'll do the minutes

  321. ralphm

    Thanks

  322. ralphm

    I thought MattJ was making notes :-D

  323. ralphm

    2. Badges

  324. nyco

    poll finished, sent to board

  325. ralphm

    Right

  326. ralphm

    So, my summary: overwhelming support for https://opensourcedesign.net/jobs/jobs/2019-03-19-design-of-badges-for-different-xmpp-compliance-levels

  327. Ge0rG

    Is it possible to get the poll results without getting elected into next Board?

  328. ralphm

    And overall enthousiasm for the concept and willingness to use

  329. nyco

    not a problem for me to send those results to members

  330. ralphm

    Ge0rG: sorry for the spoiler

  331. Ge0rG

    nyco: please do

  332. Ge0rG

    ralphm: I don't mind, as long as we are making progress here

  333. nyco

    we have three tickets regardin badges on the trello board, maybe we can archive two

  334. nyco

    what's next?

  335. ralphm

    I move we choose mray's design, request the assignment of rights, and then publish the respective badges

  336. ralphm

    +1

  337. MattJ

    +1

  338. nyco

    +1

  339. nyco

    who's in charge?

  340. Ge0rG

    is this about the optical design or also about the content?

  341. ralphm

    The optical design

  342. Ge0rG

    yay!

  343. ralphm

    I tried to find who was involved, and it seems Ge0rG is

  344. ralphm

    :-D

  345. ralphm

    (in the 'how to apply' section)

  346. ralphm

    But I can contact mray, if his contact details on this site are valid.

  347. ralphm

    I'll make a new card and archive the others.

  348. Ge0rG

    ralphm: please move on, unless you need some kind of assistance from my side

  349. nyco

    thx

  350. ralphm

    Ge0rG: unless you know this person

  351. Ge0rG

    ralphm: not at all. the only contact we had was my posting of the job

  352. ralphm

    3. Maxime Buquet => Editor Team

  353. ralphm

    pep. has requested to be on the Editor team

  354. nyco

    that would be cool

  355. ralphm

    Since he's a Member, +1

  356. Seve

    I'm here, my bad guys, was trapped in a meeting

  357. nyco

    what's the procedure here?

  358. ralphm

    we assign him this role, done

  359. nyco

    +1

  360. nyco

    —o/ Seve

  361. MattJ

    +1

  362. pep.

    And then I request superpowers to the right people?

  363. Seve

    +1 for Maxime Buquet :)

  364. nyco

    who can grant that?

  365. ralphm

    Can somebody create a PR for this?

  366. ralphm

    nyco: we do

  367. ralphm

    nyco: Board gets to assign people to work teams

  368. nyco

    I meant superpowers... then I'm interested...

  369. MattJ

    pep., get cape, wear cape, fly!

  370. pep.

    o/

  371. ralphm

    Ah, I'm sure jonas’ can help out

  372. nyco

    destroy Thanos

  373. ralphm

    or stpeter

  374. ralphm

    (not the destroying, the giving of powers)

  375. nyco

    :'(

  376. ralphm

    4. Roadmap

  377. ralphm

    I've started this, and some of this has spilled to this room

  378. ralphm

    I've found several areas that need work, in my not so humble opinion, which I should probably fold into a nice e-mail

  379. nyco

    why not a PR?

  380. ralphm

    Examples include: MIX (including how MAM should work), richer messaging (also touching upon MAM in a fairly big way), and establishing Jingle calls in 2019 (with multiple resources, some of which might be not actually connected)

  381. nyco

    good

  382. nyco

    spam?

  383. Ge0rG

    ralphm: I'm very much interested in a roadmap for the upcoming Compliance Suite 2020, because people have shown interest in the goals we have, and not just the status-quo XEPs

  384. ralphm

    nyco: because I think that a) the list is not complete, b) I'm sure others have opinions

  385. nyco

    I meant: should we add spam to our roadmap?

  386. ralphm

    Ge0rG: the discussion is here on a more general roadmap, not just for the short term, but yes, having an idea of what should be in 2020 is an interesting topic in itself

  387. Seve

    I haven't followed the room lately on this regard, but stating things that need improvement is a grest step forward, would love to see this happen

  388. Seve

    great*

  389. ralphm

    Ge0rG: but I'm not sure how 2020 could contain stuff that isn't mostly already there in some ways

  390. Ge0rG

    ralphm: maybe CS-2020 should have a short-term agenda for 2021, and you prepare the long-term agenda?

  391. Ge0rG

    I don't have any specific ideas yet.

  392. ralphm

    It could. In any case, whatever both lists will end up being, I hope Council will also have opinions on this, before we say: this is it

  393. Seve

    Agree

  394. jonas’

    ralphm, pep., FWIW, someone from iteam with powers on github is needed to grant permissions, I don’t think I have those permissions myself

  395. ralphm

    Ge0rG: so my idea was sending a mail including those examples, and have a bit of discussion, getting to some common ground

  396. ralphm

    jonas’: in that case, MattJ or Kev can help

  397. nyco

    then an email is better than a PR, ok for me

  398. ralphm

    yay

  399. Ge0rG

    speaking of iteam, https://mail.jabber.org/pipermail/standards/ is still broken

  400. Ge0rG

    ralphm: yes, please do that

  401. ralphm

    Ge0rG: noted. I'll raise it in their room

  402. Ge0rG

    👍

  403. ralphm

    5. AOB

  404. ralphm

    ?

  405. ralphm

    Oh, I noticed that JC no longer has time to do the newsletter

  406. Seve

    Yes, wanted to talk with him

  407. Seve

    But basically I would like to discuss with commteam a bit this topic

  408. ralphm

    And has announced that he's no longer doing that

  409. ralphm

    Seve: sure, just a thing to mention

  410. ralphm

    Anything else?

  411. Seve

    I'm part of it, and would like to see first what are we going to do

  412. Seve

    Nothing here

  413. ralphm

    Splendid

  414. ralphm

    6. Date of Next

  415. ralphm

    +1W

  416. nyco

    I collect links... I wanted to write a bit today, I'll still be in support/help/contrib mode

  417. ralphm

    7. Close

  418. ralphm

    Thanks all!

  419. ralphm bangs gavel

  420. Ge0rG

    nyco: also please mail the poll results to members@

  421. Seve

    Thank you guys, and sorry for my late show up

  422. nyco

    sir, yes sir

  423. ralphm

    Better late than never

  424. nyco

    no pb

  425. nyco

    thx all

  426. nyco

    I'm on the minutes, then the poll results to members

  427. jonas’

    general remark: I forgot to send out emails for the changes i pushed to xeps on tuesday, I shall do that tonight or at the weekend

  428. ralphm

    jonas’: thanks!

  429. Ge0rG suppresses a sarcastic email about the email archive not being accessible anyway.

  430. Ge0rG suppresses a sarcastic comment about the email archive not being accessible anyway.

  431. jonas’

    well done, Ge0rG!

  432. nyco

    both done

  433. ralphm

    Nice

  434. jubalh

    > I'm living between Munich and Stuttgart (South Germany) Not far from me

  435. reda-alaoui

    Hi everyone, I am implementing XEP-0313 Message Archive Management on the server side. Suppose the server supports offline storage (in addition to MAM) and the recipient of the sent message is offline. A message is sent to the offline recipient. Should the message be archived in the recipient archive WHEN: - the message is received by the recipient's server OR - the recipient turns back online

  436. Zash

    The former I think

  437. Zash

    Interaction between message archive and offline message store is something that I don't think is fully figured out yet

  438. reda-alaoui

    Thank you Zash , but that means that when the recipient client comes back online, it will probably pull the recipient archive containing the archived message while the server will be pushing the offline stored message. How will the client be able to know that the pushed message is the same as the archived message?

  439. Zash

    <stanza-id>

  440. reda-alaoui

    Ok I thought stanza-id were limited to XEP-0313. From my understanding stanza-id is set by the server. How can we provide the stanza-id outside of XEP-0313 IQ queries?

  441. Zash

    The way it goes in Prosody is: - Message comes in - Message is added to the archive - The archive ID is attached to the stanza - Delivery is attempted - If there were no online clients with non-negative priority to accept the stanza, add to offline store (with the stanza-id)

  442. Zash

    Not optimal, but it is the way it is because of historical reasons and the thing being modular.

  443. reda-alaoui

    So you are adding stanza-id to the offline storage mechanism even if it is not described in https://xmpp.org/extensions/xep-0160.html? Or am I missing a fundamental specification that introduced stanza-id for every message?

  444. Zash

    The module that handles MAM adds it when it adds the stanza to the archive. Then it just tags along through the rest of the chain of events.

  445. Ge0rG

    Zash: when do Carbons happen?

  446. Zash

    Ge0rG: Somewhere in the middle

  447. Zash

    Before normal delivery I think

  448. Ge0rG

    reda-alaoui: ideally, you could implement offline storage as a pointer into the MAM archive. When a client fetches from MAM, that pointer is moved forward. Under ideal conditions, you end up with the pointer after the end of the archive and no need to send anything after the MAM sync

  449. lovetox

    reda-alaoui, XEP313 says you MUST add the stanza-id to every message that is archived

  450. Ge0rG

    There are some corner cases with MAM limited to roster or clients only fetching a subset

  451. pep.

    So.. we're stuck on pretty basic stuff on slix while trying to add async functionalities in core parts. How do people even guarantee in-order delivery of stanzas? :x

  452. lovetox

    so if you send a message that is in your offline store AND mam archive, but dont attach a stanza-id to the offline message

  453. lovetox

    you are violating 313

  454. Ge0rG

    pep.: you can't with MAM

  455. lovetox

    because now you sent a message without stanza-id that is in fact in the MAM archive

  456. reda-alaoui

    lovetox yes I know but I didn't know it should be propagated to other specs

  457. pep.

    Ge0rG, not talking about MAM

  458. mathieui

    Ge0rG, we’re more in an omemo case

  459. Ge0rG

    lovetox: technically, you could have a separate store for offline that's filled before the message gets a MAM ID

  460. pep.

    But it's not really omemo related either tbh

  461. reda-alaoui

    Ge0rG : that's what we have currently

  462. Ge0rG

    mathieui: stupid specs come with stupid consequences for the implementation

  463. lovetox

    Ge0rG, it does not matter really, because in the moment you send a message from the offline store, you probably would put it into mam also

  464. lovetox

    and then you have to inject a stanza-id anyway

  465. Ge0rG

    reda-alaoui: but it helps a client tremendously to deduplicate, if the MAM ID is always sent

  466. lovetox

    Ge0rG, its not about help

  467. lovetox

    its mandatory

  468. reda-alaoui

    Ge0rG yes of course, it is a must have

  469. reda-alaoui

    ok, thanks a lot !

  470. reda-alaoui

    back to my code then :p

  471. lovetox

    thing is a client cant differentiate between a offline message

  472. lovetox

    and a live message

  473. lovetox

    this means i receive suddenly messages from my mam:2 server that have no stanza-id, this would in best case drop a warning

  474. lovetox

    actually just lets not test this :)

  475. Zash

    Implementation details galore

  476. lovetox

    worst case is, i have to fallback to timestamp/body based deduplication

  477. lovetox

    or even worse a client doesnt implement that because he only supports mam:2 and depends on dedup with stanza.id

  478. Zash

    Transition periods are messy

  479. lovetox

    i have to implement that offline message purge

  480. Ge0rG

    lovetox: the paragraph you quoted can be read as "the server must add the ID to the archived message only"

  481. Daniel

    pep.: my outgoing stanza queue is synchronized

  482. lovetox

    yeah yeah, i know we can read everything the other way, you are right its a grey area that was not thought about when spec mam

  483. lovetox

    so yeah please server developer add stanza-id :D

  484. Daniel

    So if I need stanzas in order I write them to that queue from the same thread and everything is fine

  485. pep.

    Daniel, how do you handle OMEMO encryption for exapmle, where you have to fetch devicelists and bundles and only then send your encrypted message

  486. Zash

    Would it be sane that if you set MAM defalut to roster, to then reject anything that doesn't go in the archive when you're offline?

  487. Zash

    As in, bounce with an error

  488. Daniel

    pep.: call backs

  489. Ge0rG

    > servers SHOULD include the element as a child of the forwarded message when using Message Carbons (XEP-0280) Another non-requirement.

  490. pep.

    Daniel, Ok so you block sending on the stream?

  491. pep.

    Well, yeah it's synchronized

  492. Zash

    Ge0rG: Make it a MUST for routing 2.0 or whatsitcalled

  493. Daniel

    No I guess you could send other stanzas while waiting for the omemo fetches to return

  494. Ge0rG

    Zash: will you implement that in prosody?

  495. pep.

    Daniel, and then you need to keep track of what came in what order, but you also need to prioritize the OMEMO IQs to be able to send that one message

  496. Zash

    Ge0rG: I make no promises about what I do with my free time.

  497. Ge0rG

    I've just realized that smack will process messages asynchronously, so when I page through 2K of MAM messages, and update the progress counter accordingly, it will arrive at 100% while the async handler is still busy somewhere in the first half

  498. lovetox

    update it on receiving the end of the page?

  499. Daniel

    pep.: well I guess I can ensure order for a particular set of stanza but I don't have to. For example I can make sure that a leave and a join presence are always send after each other

  500. Daniel

    Also the omemo message stanza waiting to be encrypted is not in the queue

  501. Daniel

    Yet

  502. pep.

    In poezio atm, I am implementing the encrypt method as a stream filter, i.e., I want to catch everything going out to be sure none of what should be encrypted is sent in plain

  503. Daniel

    I send plain text into the omemo pipeline and only after it was encrypted it becomes a stanza and gets fed into the queue

  504. pep.

    That means I can just send a normal message, and my filter will take care of the encryption

  505. pep.

    But that blocks the whole loop

  506. Daniel

    > In poezio atm, I am implementing the encrypt method as a stream filter, i.e., I want to catch everything going out to be sure none of what should be encrypted is sent in plain Yeah I'm not a fan of that approach

  507. Daniel

    That's what caused the gajim otr html body leak

  508. pep.

    hmm?

  509. lovetox

    pep. on hitting send, i check if every pre condition is met for encrypting

  510. pep.

    The point is to prevent that

  511. lovetox

    and if not, just nothing happens

  512. lovetox

    text is still in input

  513. pep.

    Otherwise I have no guarantee poezio won't send plain stuff behind my back

  514. lovetox

    i query whatever needs to be queried

  515. pep.

    (chatstates, etc.)

  516. pep.

    (and other plugins)

  517. Daniel

    pep.: but if I understand you correctly what you are doing is creating a message stanza with a plain text body and then your filter removes the body and inserts omemo. I never do that. An omemo message for me is never a message stanza

  518. Daniel

    pep.: but if I understand you correctly what you are doing is creating a message stanza with a plain text body and then your filter removes the body and inserts omemo. I never do that. An omemo message for me is never a message stanza with a normal body

  519. lovetox

    Daniel because you dont have a plugin system

  520. pep.

    :)

  521. Daniel

    Think of stanzas as being immutable.

  522. pep.

    Daniel, we're in python

  523. pep.

    Nothing is immutable

  524. Daniel

    There are not really in my code but I treat them as such

  525. Daniel

    You can still think of them as such

  526. Daniel

    lovetox: yeah I don't like that kind of plugin systems

  527. pep.

    plugin system or not, I have to review every bits of poezio to ensure I won't leak plain. Stream filters were kind of the escape hatch that would allow me not to do that

  528. pep.

    plugin system or not, I have to review every bits of poezio to ensure I won't leak plain. Stream filters were kind of the escape hatch that would have allowed me not to do that

  529. lovetox

    Daniel what you do you can only do if the client has knowledge about encryption

  530. Daniel

    lovetox: yes. Obviously

  531. mathieui

    the basic use case ("press enter") is fine, the issue is the rest of the commands and such (/correct, etc) which we have to check and disable

  532. pep.

    Also that means it doesn't make sense to implement OMEMO as a plugin in poezio anymore, without stream filters

  533. lovetox

    yeah, Gajim has no knowledge about encryption, it just passes the stanza right before sending to the encryption plugin

  534. pep.

    And that's not possible license-wise atm

  535. lovetox

    mathieui, correct is perfectly fine to use with omemo

  536. mathieui

    lovetox, yes, but the point is we need to not forget any command which might send plaintext

  537. lovetox

    yeah thats a really error prone way of doing this i think

  538. lovetox

    instead poezio should not care at all about it

  539. pep.

    Which is why I went the stream filter way.. :P

  540. lovetox

    do everything with the stanza as it would normally

  541. lovetox

    and at the end omemo runs it through a whitelist of stanza nodes

  542. mathieui

    lovetox, that was the plan

  543. Daniel

    Is there an otr plugin for poezio?

  544. pep.

    yeah

  545. pep.

    Which is..

  546. Daniel

    Because for that you also have to wait

  547. Daniel

    Even for remote peers. Which is worse

  548. pep.

    I actually have no clue, I won't pronounce myself on it :x

  549. lovetox

    but this has nothing to do with the problem pep. described i think

  550. mathieui

    Daniel, the OTR plugin is implemented in the way I described above

  551. lovetox

    you should have a handler that checks before creating a stanza, even before removing the message from the input field

  552. lovetox

    if encryption is even possible

  553. mathieui

    which is *really* ugly (whitelist elements, intercept the code that sends messages etc)

  554. lovetox

    not pass it to haf of poezio than at the end find out we cant even encrypt because key is missing

  555. pep.

    lovetox, "before creating a stanza" doesn't map as you think it does, in slix

  556. lovetox

    this has nothing to do with slix

  557. lovetox

    that is UI code

  558. lovetox

    you press the button

  559. pep.

    hmm?

  560. lovetox

    on button pres, you check

  561. Daniel

    > lovetox, "before creating a stanza" doesn't map as you think it does, in slix Then do it in poezio. Not in slix

  562. pep.

    nowhere I mentioned UI :P

  563. pep.

    I actually don't care about UI for now

  564. Ge0rG

    This is the moment when you introduce numeric stanza filter priorities, so that you can do encryption last.

  565. pep.

    Daniel, yeah, slix/poezio ~

  566. Zash

    And then you need something *really last*

  567. Ge0rG

    Zash: thus numeric.

  568. lovetox

    pep., you check before the message would vanish from the input

  569. Zash

    priority=infinity+1

  570. Ge0rG

    And then a plugin author thinks they must be laster than last and change the body post encryption.

  571. Daniel

    Did I mention I don't like plug-ins?

  572. Zash

    Double-edged sword if anything

  573. lovetox

    also writing a client is one thing

  574. lovetox

    writing a client that perfectly interfaces with all kind of plugins

  575. lovetox

    a whole other game :)

  576. Ge0rG

    Just write a plugin management system and let the modules do the rest.

  577. Ge0rG

    If you are okay with Lua, there is a decent plugin management system that's handling xml streams already.

  578. Zash

    Ge0rG: You know how Prosody is actually a Lua variant of node.js with some plugin management on top?

  579. Ge0rG

    Zash: no.

  580. Zash

    Unheard of!

  581. Ge0rG

    Zash: prosody requires a VirtualHost, so it can't be what you claim it is.

  582. pep.

    Daniel, yeah that's a different discussion, I don't have a choice anymore :)

  583. Daniel

    In any case I suppose you currently have something of a `on_message` hook that has a message stanza as a parameter. What you probably want to do is create another hook `on_message_submitted` that has the plain text of the input and gets fired as soon as the user presses enter.

  584. Daniel

    And if that hook returns true it gets into the normal pipeline and the input field gets cleared

  585. Daniel

    And for omemo message you handle it differently

  586. Ge0rG

    But then you need an internal representation for all message types, which is then mapped to the respective xml on transmission.

  587. Daniel

    And then after omemo ran over it you can re-emit the message stanza and run it though the chain

  588. pep.

    Daniel, yeah, it's already what I'm doing but at the slix level. I'd need to look into it because atm it seems to me I'm going to run into the same problems

  589. Daniel

    Same problem = leaking stuff you don't want to leak?

  590. pep.

    no

  591. pep.

    I lose in-order guarantees

  592. pep.

    Either that or I block my stream for ages while fetching devicelists and bundles

  593. pep.

    https://lab.louiz.org/poezio/slixmpp/merge_requests/24/diffs that's supposed to help here, but it's still not what we want