Yes you need to start mam or get the last if *before* you send presence ✎
Daniel
Yes you need to start mam or get the last ID *before* you send presence ✏
Daniel
Don't think carbons have anything to do with that
jonas’
you could enable carbons before sending presence, too
Tobiashas left
Tobiashas joined
jonas’
but don’t you need to to MAM *after* sending presence/enabling carbons to not lose a message?
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
Daniel
Mhhh ideally then you'd get the last ID before presence but fire the query after
jonas’
sure
jonas’
no, wit
jonas’
*wait
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?
Daniel
jonas’: last ID defines the lower end
jonas’
what does "lower" mean in that context?
Daniel
Upper end is undefined
jonas’
is last ID the last thing you saw in your last session?
jonas’
or is last ID the newest ID?
Daniel
Yes
Daniel
The newest you currently have locally
ralphm
But you won't get newer messages until you sent presence.
jonas’
Daniel, I see!
jonas’
that makes sense then
jonas’
it’s early in the morning, sorry :)
sezuanhas joined
ralphm
Daniel: if you're saying there's a specific order of events that ensures you get all messages, is that documented somewhere?
davidhas left
ralphm
Like: get last id, send carbons request, send presence, request mam?
ralphm
Because XEP-0313 says client sync is it of scope (!), and refers to bind2.
ralphm
out of scope
Ge0rG
ralphm: an attempt was made to document it in 0313, but it turned out not to work.
Daniel
what didn’t work?
Daniel
the attempt?
Ge0rG
Daniel: the actual ordering that was written down, I think
ralphm
Ge0rG: so is there an order that does work? Or can it not be solved with current protocols?
Daniel
the order that ralphm just wrote down doesn’t work?
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?
ralphm
I believe that the order I mentioned is at-least-once. There's no such thing as exactly-once in general.
Daniel
well receiving MAM and offline messages in parallel isn’t that bad; you can dedup them
Holger
Right, there's no way to avoid dedup.
Daniel
however when i detect that MAM preferences are set to always and server has offline msg mangament things i also run a purge
Daniel
before sending presence
Holger
… which can reduce the number of messages to dedup, yes.
Daniel
but i see that only as a minor traffic optimization
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
ralphm
Daniel: is the filter for messages going to MAM and offline identical?
Ge0rG
ralphm: probably not
Daniel
my dedup would work fine; and does on servers that don’t have the purge thing
Daniel
ralphm, i guess there is nothing in the protocol to ensure that
ralphm
Ge0rG: you don't get carbons until you send presence
Ge0rG
Daniel: if you purge offline, isn't there a chance that you'll purge too much?
Ge0rG
ralphm: are you sure?
Daniel
Ge0rG, well my reasoning is if it doesn’t end up in MAM it wasn’t important
Daniel
your second client wouldn’t receive it either
ralphm
That's the idea. Before sending presence, you only get message stanzas directed at your full JID.
Daniel
i mean if the rules between offline messages and mam differ it is probably time to reconsider the rules
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.
Daniel
but if you hate the purge don’t purge
Daniel
that's not something i would codify anywhere
Daniel
especially since purge capability isn’t really widespread anywhere
ralphm
Ge0rG: hmm, that surprises me. Curious how servers implement this then.
Steve Killehas left
zachhas left
zachhas joined
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 :)
Ge0rG
Daniel: I remember complaining about a race condition there, but I can't say right now what it was
Ge0rG
jonas’: I'm doing that, but a negative presence still is a presence
ralphm
Right
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?
ralphm
I'm curious in what situation that is beneficial.
jonas’
ralphm, the non-carbons-enabled client will get all the messages because it’s the only one with >= 0 priority
jonas’
while the carbons-enabled clients also get the messages because they’ve enabled carbons
ralphm
But only of type chat, for example.
Holger
So just a trick to get carbons behavior with n clients although only n-1 clients support carbons.
sezuanhas left
lovetox_has joined
jonas’
"good enough"
ralphm
Hmm
Daniel
not that implementing carbons in a client is hard…
ralphm
It is interesting though. Most clients use presence priority to figure out which 'show' to display.
ralphm
So in this setting that might mislead
ralphm
Obscure edge case, maybe
Holger
Yes.
sezuanhas joined
ralphm
Any way, I think that servers will still wait for presence to start sending any messages.
ralphm
(that were not to this connection's resource)
Lancehas left
waqashas joined
Steve Killehas joined
lovetox_
It does not matter in what order you activate carbons, presence, offline messages
lovetox_
you can never miss a message if you do MAM last
lovetox_
thats the easy way, that might have here and there some message that has to be deduped
lovetox_
but thats no problem with stanza.-id
jubalhhas joined
ralphm
lovetox_: what was said is that before sending all that, you need to establish the last id you have.
murabitohas left
murabitohas joined
ralphm
The rest of the order is less relevant, although there might be an optimum to minimize traffic of dupes.
jcbrandhas joined
lovetox_
you have the last ID in your database
zachhas left
zachhas joined
ralphm
Yes, you just need to make sure you don't invalidate it by getting new messages before doing MAM
lovetox_
yes of course, before MAM catchup is not complete you should not record "last stanza id"
lovetox_
and MAM catchup will always give you the very last message
ralphm
That was the thing we tried to convey
ralphm
I'm still curious as to why it is said to be out of scope and mentions bind2 as possible remedy.
flow
So is it guaranteed that servers don't mix in live messages while sending MAM messages?
ralphm
flow: I don't think so
ralphm
That seems complex to implement
Lancehas joined
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
jonas’
removing the need to deduplicate there
waqashas left
Ge0rG
Yes, essentially you need an atomic operation where you enable live traffic and receive the ID of the last non live message
Ge0rG
So that you can fill the hole.
Ge0rG
But there is no way to actually receive what you need in a linear order.
jonas’
true
jmpmanhas joined
davidhas joined
davidhas left
Ge0rG
and there is no way to receive the messages exactly once.
lovetox_
flow why would it make a difference if a server mixes in live messages?
jonas’
Ge0rG, with bind2, there would be, or?
Ge0rG
jonas’: maybe
jonas’
"maybe"?
Ge0rG
jonas’: if bind2 also removes all MAMed messages from the offline history sync
jonas’
in my world, offline messages do not exist and you always purge them.
davidhas joined
ralphm
jonas’: that sync point seems to be when the server receives presence
jonas’
ralphm, it’s not a sync point, because you don’t get the "newest MAM ID" from that
jonas’
(you = the client)
ralphm
It is a sync point for live messages
jonas’
how is it sync if it’s one-way?
ralphm
Well, sure you still need to do the mam query afterwards. I don't see how one can technically achieve exactly once.
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
jonas’
then you’d query from "last stanza ID I’ve seen" until "most-recent stanza ID I got from presence"
lovetox_
you dont record that jonas
zachhas left
zachhas joined
jonas’
lovetox_, ?
lovetox_
you dont record last-stanza-id until you made your mam query
lovetox_
and while the mam query is running you ignore all stanza-ids from live and carbons
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.
lovetox_
you only look at the mam query
jonas’
ralphm, sure.
lovetox_
the last message in the mam query, is your most recent message, then you record the stanza-id
lovetox_
and then you are fully synced
lovetox_
and it does not matter what the server sends you inbetween your mam query
jonas’
if you don’t want to be efficient, sure.
ralphm
I've also seen MAM implementations that were eventually consistent, by the way.
lovetox_
yes jonas thats what we were saying
ralphm
(server side)
lovetox_
and nobody needs to be efficient here, mam is complex enough
lovetox_
a few duplicates are not bad, its totally fine
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
lovetox_
and btw you have the same thing with MUC
lovetox_
live messages will arrive while you query mam
ralphm
Oh, don't get me started on MUC or MIX.
lovetox_
i would argue this was a problem back in mam:0 mam:1 days
lovetox_
if you could not depend on stanza-id
lovetox_
now with mam:2, really i dont care about a handful of duplicates in a mam catchup
ralphm
Sure.
ralphm
Problem with group chats is that you have to do it for each room.
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).
Mikaelahas joined
Nekithas left
morganhas joined
Mikaelahas left
lovetox_
ralphm what is the problem with making a query to each MUC? inefficient?
Mikaelahas joined
lovetox_
yes maybe i can spare 20 stanzas, for 20 muc joins, but other than that, this just works
lovetox_
if i switch now to some other concept, like you just decribe and for that get real problems like s2s catchup etc
lovetox_
i would stay with the old behaviour
murabitohas left
murabitohas joined
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
Daniel
Or magically know where the gaps are
morganhas left
remkohas joined
Nekithas joined
Ge0rG
lovetox_: on mobile clients, it makes sense to reduce: round-trips, wakeups, data bandwidth
lovetox_
yes, i have to trust you on that
lovetox_
though i would say mobile clients with stream management should not run to often into the, total connection reset scenario
zachhas left
zachhas joined
Daniel
Ge0rG, well you'd do mam and join at the same time. so it's not more roundtrips or more wake ups
Daniel
all it does it redcue traffic
Daniel
which is fair
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.
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"
morganhas joined
pdurbinhas left
lovetox_has left
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
Daniel
especially not in 501 transactions
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.
ralphm
I'm sure there are server side optimizations that could be done.
Ge0rG
Daniel: having 501 archives wasn't a problem for the designers of MIX
Daniel
Ge0rG, yes we are talking about mix
Daniel
(or muc/sub which does similar things for that matter)
lovetox_has joined
ralphm
I mean we are also sending 501 copies over the wire.
Nekithas left
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
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
ralphm
Even if participants are on the same server. And not counting c2s copies
Daniel
which is actually a problem we are running into on one project
moparisthebesthas left
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
ralphm
If the problem is retention, then there are two ways: limit in time/space, or pay for storage.
Ge0rG
speaking of MAM, where are MUC-PMs stored?
Daniel
for us it was not necessary the storage but the throughput
Daniel
501 transactions are expensive
Ge0rGis still struggling with the right SQL query to obtain the last-stanza-ID for MAM sync
ralphm
Daniel: did you see my 'eventually consistent' remark above?
morganhas left
Daniel
ralphm, your point being we just have to do it anyway?
lovetox_
Ge0rG on your account MAM
lovetox_
if this was the question
Ge0rG
lovetox_: yes
lovetox_
only type=groupchat is in the MUC archive, usually on current servers
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.
Daniel
yes you get your PMs from your normal catchup
morganhas joined
Nekithas joined
Daniel
ralphm, yes to all that
Dele (Mobile)has joined
Daniel
and also rather expensive with the way MAM is designed right now
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?
Lancehas left
Daniel
did someone say matrix?
Holger
So we get the cons of Matrix without the pros?
Holger
Hah.
waqashas joined
Holger
Not sure we need to agree on a model though. I guess local MIX archives can remain an optional feature without introducing trouble?
lskdjfhas joined
Daniel
as long as it is advertised and clients know what to do
morganhas left
lovetox_
Holger just out of interest how many messages does the conversations.im server MAM archive contain currently ?
Daniel
alot.jpg
lovetox_
i think you have no MAM storage time limit on that server if i remember correctly
Daniel
we do; because we ran out of disk space :-)
lovetox_
haha 😃
larmahas joined
Holger
This came totally unexpected.
Nekithas left
Nekithas joined
adityaborikarhas joined
Dele (Mobile)has left
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.
zachhas left
zachhas joined
Yagizahas left
Yagizahas joined
ralphm
Having just a dag of commits is not great in that respect
Ge0rG
couldn't an account server "cheat" by just forwarding all MAM queries to the MIX service?
jonas’
Ge0rG, only if you were to filter by the MIX service
jonas’
my understanding is that a normal MAM query would give you MIX and non-MIX messages interleaved
ralphm
Ge0rG: that might not complete in a reasonable time, and still leave you with gaps?
jmpmanhas left
ralphm
What jonas’ says
Daniel
also how would your server know the relevant stanza-id of the mix service
Ge0rG
Eww.
Ge0rG
Right. So many problems.
ralphm
As I said, this is not easy
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.
Ge0rG
that remark was about MUC
ralphm
Ok
Ge0rG
If only we had threads.
morganhas joined
ralphm
😭
waqashas left
adityaborikarhas left
jonas’
is this the "Can of Worms" day?
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?
Ge0rG
jonas’: like every day.
Nekithas left
ralphm
Ge0rG: maybe.
Lancehas joined
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.
Nekithas joined
Daniel
yes
Ge0rG
And I need a DB index on that flag.
Daniel
or do the gajim where you store the last mam ids seperatly
Ge0rG
What could possibly go wrong with that?
Daniel
probably the same amount of things that can go wrong with your approach
Daniel
only different things
Ge0rG
I'm still wondering, given a set of IDs, how do I determine which one is last?
Ge0rG
The anticipated answer is: I can't, I need to know from the context
zachhas left
zachhas joined
Daniel
the gajim way(tm) also gives you the ability to remove messages locally while still making the catchup work
Daniel
and not re-fetch a deleted message
ajhas left
Daniel
there are forked versions of Conversations that do the gajim for that purpose
morganhas left
Ge0rG
Yeah, that makes some sense.
lovetox_
Ge0rG i would suggest to hold the last stanza id per jid, in a separate table
lovetox_
and yes stanza-id has no order
Ge0rG
lovetox_: is there anything else one should put into that table?
lovetox_
so just from the id you cant determine if its the highest or lowest
lovetox_
its opaque
Ge0rG
lovetox_: you update that table when you finish a MAM query?
lovetox_
no on every MAM message
lovetox_
so if the catchup breaks up or my client crashes
Ge0rG
lovetox_: on every in-order MAM message? Or are all your MAM messages in-order?
lovetox_
i dont have to refetch
Ge0rG
Sigh. I wish MAM would go away and server would just track the last delivered message per client resource.
Ge0rG
it would be so easy with 0198, at least for the sake of full-sync clients
lovetox_
i contact you later Ge0rG with the db schema and what i store, must go now
Ge0rG
lovetox_: thanks!
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
ralphm
For me Gajim never seems to properly retrieve / show MUC history after coming online.
Ge0rG
What's the status of the Badges poll, BTW? I'd _really_ like to know the results.
morganhas joined
Danielhas left
Danielhas joined
lovetox_
ralphm this works. but it only shows what you missed
lovetox_
so if you join twice, all history messages are in the history window CTRL + H
Ge0rG
what is a history window and why should it even be there?
I never understood that. I want the history in the respective chat tab, with a dynamic filter if possible
lovetox_
i want that too but i have not time to do it 🙂
lovetox_
as you may know Gajim is 15+ years
Ge0rG
Yeah.
lovetox_
and dynamic history loading in the same window was not a thing 10 years back
Daniel
Also people weirdly love that
Ge0rG
which reminds me. Tomorrow is yaxim's 10th birthday.
Ge0rG
Daniel: people love the history window?
Daniel
Yes
Ge0rG
Weird indeed
Holger
You just know weird people.
jonas’
most people are weird
lovetox_
also displaying only in the chat window is not a solution for all circumstances
Ge0rG
lovetox_: now I'm curious
lovetox_
i may want to look at history with contacts that are not in my roster anymore
lovetox_
or MUCs i dont want to join anymore
lovetox_
having it *only* in the chat has drawbacks
Ge0rG
lovetox_: what's wrong with displaying those in the respective chat tabs, without joining?
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
lovetox_
and how do i know if the user wants to only look at history or want to join=?
lovetox_
etc etc
Ge0rG
Yes.
lovetox_
this is of course the easy thing for 90% of all use cases
Daniel
And space bar heating
waqashas joined
Ge0rG
Yesterday I ran hashcat on my laptop's Intel GPU. There was a frightening smell of something burnt. And space bar heating.
zachhas left
zachhas joined
morganhas left
lovetox_has left
lovetox_has joined
Lancehas left
Fahrgasthas left
morganhas joined
morganhas left
waqashas left
jabberjockehas joined
jabberjocke_has joined
Fahrgasthas joined
morganhas joined
Lancehas joined
jabberjocke_has left
jabberjockehas left
zachhas left
zachhas joined
LNJhas joined
morganhas left
pdurbinhas joined
lovetox_has left
morganhas joined
Fahrgasthas left
adityaborikarhas joined
Fahrgasthas joined
ajhas joined
neshtaxmpphas left
neshtaxmpphas joined
pdurbinhas left
morganhas left
morganhas joined
jmpmanhas left
morganhas left
lovetox_has joined
lovetox_has left
Lancehas left
zachhas left
zachhas joined
lovetox_has joined
ajhas left
lovetox_
Ge0rG : what i save in the table is, archive_jid, last_mam_id, last_timestamp
lovetox_
i save the timestamp because i ran into the following problem
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
lovetox_
so i can now switch to a timebased query, like give me last 2 days
lovetox_
i apply this only to public mucs
Ge0rG
interesting, thanks
Ge0rG
lovetox_: is archive_jid the JID of the MAM service? Do you have your own domain in there for account MAM?
lovetox_
yes
lovetox_
no
jubalhhas left
lovetox_
its just the jid of the archive
lovetox_
and yes my own jid is in this table
lovetox_
but i apply different rules to account mam query, i always request everything there, except on very first start
Lancehas joined
Ge0rG
what do you request on first start?
lovetox_
i think 7 days
lovetox_
but i have a button in gajim, that lets you sync any timeperiod before
zachhas left
zachhas joined
Ge0rG
into the history window? ;)
lovetox_
yes
lovetox_
this is not a button per chat
lovetox_
this is a account button, sync everything, last 6 months, last 3 months
Nekithas left
lovetox_
like one time shot, after setting up a client, do i want to have my whole archive locally or not
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
Nekithas joined
adityaborikarhas left
adityaborikarhas joined
jmpmanhas joined
morganhas joined
morganhas left
zachhas left
zachhas joined
Lancehas left
jabberjocke_has joined
jabberjockehas joined
Mikaelahas left
valohas left
valohas joined
UsLhas left
Mikaelahas joined
Lancehas joined
Nekithas left
Nekithas joined
Mikaelahas left
Mikaelahas joined
morganhas joined
pdurbinhas joined
morganhas left
jubalhhas joined
waqashas joined
adityaborikarhas left
adityaborikarhas joined
morganhas joined
mathieuihas left
mathieuihas joined
morganhas left
waqashas left
pdurbinhas left
murabitohas left
jabberjockehas left
zachhas left
zachhas joined
jmpmanhas left
jabberjockehas joined
debaclehas joined
jabberjocke_has left
jabberjockehas left
jabberjocke_has joined
jabberjockehas joined
jabberjocke_has left
jabberjockehas left
Lancehas left
jabberjocke_has joined
jabberjockehas joined
stpeterhas joined
peterhas joined
jabberjockehas left
jabberjocke_has left
peterhas left
jabberjocke_has joined
jabberjockehas joined
jabberjocke_has left
jabberjockehas left
jabberjocke_has joined
jabberjockehas joined
jabberjockehas left
jabberjocke_has left
debaclehas left
jabberjocke_has joined
jabberjockehas joined
jmpmanhas joined
mr.fisterhas joined
jabberjocke_has left
jabberjockehas left
jabberjockehas joined
jabberjocke_has joined
Lancehas joined
stpeterhas left
Fahrgasthas left
lskdjfhas left
lskdjfhas joined
zachhas left
zachhas joined
morganhas joined
Nekithas left
Nekithas joined
morganhas left
zachhas left
zachhas joined
stpeterhas joined
Danielhas left
Danielhas joined
Fahrgasthas joined
jabberjockehas left
jabberjocke_has left
Mikaelahas left
Mikaelahas joined
Danielhas left
Danielhas joined
jabberjocke_has joined
jabberjockehas joined
Lancehas left
zachhas left
zachhas joined
stpeterhas left
COM8has joined
COM8has left
COM8has joined
COM8has left
COM8has joined
COM8has left
nycohas joined
jabberjocke_has left
jabberjockehas left
nyco
time?
ralphmbangs gavel
Guus
I'm just being called
ralphm
0. Welcome + Agenda
Guus
I'll lurk for the duration of this call
ralphm
Hi all!
COM8has joined
nyco
so we're 2.5?
nyco
is it a quorum?
ralphm
hehe, not yet
ralphm
Seve and MattJ will surely show up
Guus
I'm afraid this is going to take a while
Guus
customer on the phone
jabberjocke_has joined
jabberjockehas joined
ralphm
Guus: no worries
nyco
for a good or a bad news?
COM8has left
MattJ
Hey
nyco
cool
ralphm
There we go.
Guus
unsure
Guus
count me out guys, sorry
MattJ
Sorry, I honestly didn't know it was Thursday :)
ralphm
1. Minute taker
ralphm
MattJ: happens roughly every 7 days
MattJ
I'll make a note of that
pdurbinhas joined
nyco
or every 14 days
jabberjocke_has left
jabberjockehas left
nyco
I'll do the minutes
ralphm
Thanks
ralphm
I thought MattJ was making notes :-D
ralphm
2. Badges
nyco
poll finished, sent to board
Alexhas left
ralphm
Right
zachhas left
ralphm
So, my summary: overwhelming support for https://opensourcedesign.net/jobs/jobs/2019-03-19-design-of-badges-for-different-xmpp-compliance-levels
zachhas joined
Ge0rG
Is it possible to get the poll results without getting elected into next Board?
ralphm
And overall enthousiasm for the concept and willingness to use
nyco
not a problem for me to send those results to members
ralphm
Ge0rG: sorry for the spoiler
madhur.garghas left
madhur.garghas joined
Ge0rG
nyco: please do
Ge0rG
ralphm: I don't mind, as long as we are making progress here
Lancehas joined
stpeterhas joined
nyco
we have three tickets regardin badges on the trello board, maybe we can archive two
nyco
what's next?
ralphm
I move we choose mray's design, request the assignment of rights, and then publish the respective badges
Nekithas left
ralphm
+1
MattJ
+1
nyco
+1
nyco
who's in charge?
moparisthebesthas joined
Nekithas joined
Ge0rG
is this about the optical design or also about the content?
ralphm
The optical design
Ge0rG
yay!
ralphm
I tried to find who was involved, and it seems Ge0rG is
ralphm
:-D
ralphm
(in the 'how to apply' section)
ralphm
But I can contact mray, if his contact details on this site are valid.
ralphm
I'll make a new card and archive the others.
Ge0rG
ralphm: please move on, unless you need some kind of assistance from my side
nyco
thx
ralphm
Ge0rG: unless you know this person
Ge0rG
ralphm: not at all. the only contact we had was my posting of the job
pdurbinhas left
ralphm
3. Maxime Buquet => Editor Team
ralphm
pep. has requested to be on the Editor team
nyco
that would be cool
ralphm
Since he's a Member, +1
Seve
I'm here, my bad guys, was trapped in a meeting
nyco
what's the procedure here?
ralphm
we assign him this role, done
nyco
+1
nyco
—o/ Seve
MattJ
+1
pep.
And then I request superpowers to the right people?
Seve
+1 for Maxime Buquet :)
mr.fisterhas left
nyco
who can grant that?
mr.fisterhas joined
ralphm
Can somebody create a PR for this?
ralphm
nyco: we do
ralphm
nyco: Board gets to assign people to work teams
nyco
I meant superpowers... then I'm interested...
mr.fisterhas left
mr.fisterhas joined
MattJ
pep., get cape, wear cape, fly!
pep.
o/
ralphm
Ah, I'm sure jonas’ can help out
nyco
destroy Thanos
ralphm
or stpeter
lovetox_has left
ralphm
(not the destroying, the giving of powers)
nyco
:'(
ralphm
4. Roadmap
ralphm
I've started this, and some of this has spilled to this room
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
nyco
why not a PR?
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)
nyco
good
nyco
spam?
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
ralphm
nyco: because I think that a) the list is not complete, b) I'm sure others have opinions
nyco
I meant: should we add spam to our roadmap?
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
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
Nekithas left
Seve
great*
ralphm
Ge0rG: but I'm not sure how 2020 could contain stuff that isn't mostly already there in some ways
Nekithas joined
stpeterhas left
Ge0rG
ralphm: maybe CS-2020 should have a short-term agenda for 2021, and you prepare the long-term agenda?
Ge0rG
I don't have any specific ideas yet.
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
Seve
Agree
zachhas left
zachhas joined
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
ralphm
Ge0rG: so my idea was sending a mail including those examples, and have a bit of discussion, getting to some common ground
ralphm
jonas’: in that case, MattJ or Kev can help
nyco
then an email is better than a PR, ok for me
ralphm
yay
Ge0rG
speaking of iteam, https://mail.jabber.org/pipermail/standards/ is still broken
Ge0rG
ralphm: yes, please do that
ralphm
Ge0rG: noted. I'll raise it in their room
Ge0rG
👍
ralphm
5. AOB
ralphm
?
ralphm
Oh, I noticed that JC no longer has time to do the newsletter
Seve
Yes, wanted to talk with him
Seve
But basically I would like to discuss with commteam a bit this topic
ralphm
And has announced that he's no longer doing that
ralphm
Seve: sure, just a thing to mention
ralphm
Anything else?
Seve
I'm part of it, and would like to see first what are we going to do
Seve
Nothing here
ralphm
Splendid
ralphm
6. Date of Next
ralphm
+1W
nyco
I collect links... I wanted to write a bit today, I'll still be in support/help/contrib mode
jmpmanhas left
ralphm
7. Close
ralphm
Thanks all!
ralphmbangs gavel
Ge0rG
nyco: also please mail the poll results to members@
Seve
Thank you guys, and sorry for my late show up
nyco
sir, yes sir
ralphm
Better late than never
nyco
no pb
nyco
thx all
nyco
I'm on the minutes, then the poll results to members
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
ralphm
jonas’: thanks!
Ge0rGsuppresses a sarcastic email about the email archive not being accessible anyway.
> I'm living between Munich and Stuttgart (South Germany)
Not far from me
Douglas Terabytehas left
stpeterhas left
eevvoorhas joined
Douglas Terabytehas joined
eevvoorhas left
Douglas Terabytehas left
Douglas Terabytehas joined
zachhas left
zachhas joined
LNJhas left
pdurbinhas joined
morganhas left
morganhas joined
LNJhas joined
zachhas left
zachhas joined
lumihas joined
Douglas Terabytehas left
Fahrgasthas left
sezuanhas left
pdurbinhas left
Douglas Terabytehas joined
UsLhas joined
Nekithas joined
sezuanhas joined
Yagizahas left
Yagizahas joined
j.rhas left
Lancehas left
j.rhas joined
zachhas left
zachhas joined
UsLhas left
reda-alaouihas joined
sezuanhas left
kokonoehas left
Fahrgasthas joined
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
kokonoehas joined
Zash
The former I think
Zash
Interaction between message archive and offline message store is something that I don't think is fully figured out yet
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?
zachhas left
zachhas joined
Zash
<stanza-id>
Alexhas left
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?
Fahrgasthas left
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)
Zash
Not optimal, but it is the way it is because of historical reasons and the thing being modular.
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?
Yagizahas left
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.
morganhas left
Ge0rG
Zash: when do Carbons happen?
Zash
Ge0rG: Somewhere in the middle
Zash
Before normal delivery I think
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
lovetox
reda-alaoui, XEP313 says you MUST add the stanza-id to every message that is archived
Ge0rG
There are some corner cases with MAM limited to roster or clients only fetching a subset
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
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
lovetox
you are violating 313
Ge0rG
pep.: you can't with MAM
lovetox
because now you sent a message without stanza-id that is in fact in the MAM archive
reda-alaoui
lovetox yes I know but I didn't know it should be propagated to other specs
pep.
Ge0rG, not talking about MAM
mathieui
Ge0rG, we’re more in an omemo case
Ge0rG
lovetox: technically, you could have a separate store for offline that's filled before the message gets a MAM ID
pep.
But it's not really omemo related either tbh
reda-alaoui
Ge0rG : that's what we have currently
Ge0rG
mathieui: stupid specs come with stupid consequences for the implementation
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
lovetox
and then you have to inject a stanza-id anyway
Ge0rG
reda-alaoui: but it helps a client tremendously to deduplicate, if the MAM ID is always sent
lovetox
Ge0rG, its not about help
lovetox
its mandatory
reda-alaoui
Ge0rG yes of course, it is a must have
reda-alaoui
ok, thanks a lot !
reda-alaoui
back to my code then :p
remkohas left
lovetox
thing is a client cant differentiate between a offline message
lovetox
and a live message
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
lovetox
actually just lets not test this :)
Zash
Implementation details galore
lovetox
worst case is, i have to fallback to timestamp/body based deduplication
lovetox
or even worse a client doesnt implement that because he only supports mam:2 and depends on dedup with stanza.id
Zash
Transition periods are messy
lovetox
i have to implement that offline message purge
Ge0rG
lovetox: the paragraph you quoted can be read as "the server must add the ID to the archived message only"
Daniel
pep.: my outgoing stanza queue is synchronized
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
lovetox
so yeah please server developer add stanza-id :D
Daniel
So if I need stanzas in order I write them to that queue from the same thread and everything is fine
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
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?
Zash
As in, bounce with an error
Daniel
pep.: call backs
Ge0rG
> servers SHOULD include the element as a child of the forwarded message when using Message Carbons (XEP-0280)
Another non-requirement.
pep.
Daniel, Ok so you block sending on the stream?
zachhas left
pep.
Well, yeah it's synchronized
Steve Killehas joined
zachhas joined
Fahrgasthas joined
Zash
Ge0rG: Make it a MUST for routing 2.0 or whatsitcalled
LNJhas left
Daniel
No I guess you could send other stanzas while waiting for the omemo fetches to return
Ge0rG
Zash: will you implement that in prosody?
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
Zash
Ge0rG: I make no promises about what I do with my free time.
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
lovetox
update it on receiving the end of the page?
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
Daniel
Also the omemo message stanza waiting to be encrypted is not in the queue
Daniel
Yet
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
j.rhas left
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
j.rhas joined
pep.
That means I can just send a normal message, and my filter will take care of the encryption
pep.
But that blocks the whole loop
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
Daniel
That's what caused the gajim otr html body leak
pep.
hmm?
lovetox
pep. on hitting send, i check if every pre condition is met for encrypting
pep.
The point is to prevent that
lovetox
and if not, just nothing happens
lovetox
text is still in input
pep.
Otherwise I have no guarantee poezio won't send plain stuff behind my back
UsLhas joined
lovetox
i query whatever needs to be queried
pep.
(chatstates, etc.)
pep.
(and other plugins)
Fahrgasthas left
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✎
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 ✏
lovetox
Daniel because you dont have a plugin system
pep.
:)
Daniel
Think of stanzas as being immutable.
pep.
Daniel, we're in python
pep.
Nothing is immutable
Daniel
There are not really in my code but I treat them as such
Daniel
You can still think of them as such
Daniel
lovetox: yeah I don't like that kind of plugin systems
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✎
jcbrandhas left
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 ✏
lovetox
Daniel what you do you can only do if the client has knowledge about encryption
Daniel
lovetox: yes. Obviously
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
pep.
Also that means it doesn't make sense to implement OMEMO as a plugin in poezio anymore, without stream filters
lovetox
yeah, Gajim has no knowledge about encryption, it just passes the stanza right before sending to the encryption plugin
pep.
And that's not possible license-wise atm
Nekithas left
lovetox
mathieui, correct is perfectly fine to use with omemo
mathieui
lovetox, yes, but the point is we need to not forget any command which might send plaintext
lovetox
yeah thats a really error prone way of doing this i think
lovetox
instead poezio should not care at all about it
pep.
Which is why I went the stream filter way.. :P
lovetox
do everything with the stanza as it would normally
lovetox
and at the end omemo runs it through a whitelist of stanza nodes
mathieui
lovetox, that was the plan
Daniel
Is there an otr plugin for poezio?
pep.
yeah
pep.
Which is..
Daniel
Because for that you also have to wait
Daniel
Even for remote peers. Which is worse
pep.
I actually have no clue, I won't pronounce myself on it :x
lovetox
but this has nothing to do with the problem pep. described i think
mathieui
Daniel, the OTR plugin is implemented in the way I described above
lovetox
you should have a handler that checks before creating a stanza, even before removing the message from the input field
lovetox
if encryption is even possible
mathieui
which is *really* ugly (whitelist elements, intercept the code that sends messages etc)
lovetox
not pass it to haf of poezio than at the end find out we cant even encrypt because key is missing
pep.
lovetox, "before creating a stanza" doesn't map as you think it does, in slix
lovetox
this has nothing to do with slix
lovetox
that is UI code
lovetox
you press the button
pep.
hmm?
lovetox
on button pres, you check
Tobiashas left
Daniel
> lovetox, "before creating a stanza" doesn't map as you think it does, in slix
Then do it in poezio. Not in slix
pep.
nowhere I mentioned UI :P
pep.
I actually don't care about UI for now
Ge0rG
This is the moment when you introduce numeric stanza filter priorities, so that you can do encryption last.
pep.
Daniel, yeah, slix/poezio ~
Zash
And then you need something *really last*
Ge0rG
Zash: thus numeric.
lovetox
pep., you check before the message would vanish from the input
Zash
priority=infinity+1
Ge0rG
And then a plugin author thinks they must be laster than last and change the body post encryption.
Daniel
Did I mention I don't like plug-ins?
Zash
Double-edged sword if anything
lovetox
also writing a client is one thing
lovetox
writing a client that perfectly interfaces with all kind of plugins
lovetox
a whole other game :)
Ge0rG
Just write a plugin management system and let the modules do the rest.
kokonoehas left
Ge0rG
If you are okay with Lua, there is a decent plugin management system that's handling xml streams already.
Zash
Ge0rG: You know how Prosody is actually a Lua variant of node.js with some plugin management on top?
Ge0rG
Zash: no.
Zash
Unheard of!
Ge0rG
Zash: prosody requires a VirtualHost, so it can't be what you claim it is.
pep.
Daniel, yeah that's a different discussion, I don't have a choice anymore :)
kokonoehas joined
Fahrgasthas joined
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.
zachhas left
zachhas joined
Daniel
And if that hook returns true it gets into the normal pipeline and the input field gets cleared
Daniel
And for omemo message you handle it differently
Ge0rG
But then you need an internal representation for all message types, which is then mapped to the respective xml on transmission.
Daniel
And then after omemo ran over it you can re-emit the message stanza and run it though the chain
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
Daniel
Same problem = leaking stuff you don't want to leak?
pep.
no
pep.
I lose in-order guarantees
pep.
Either that or I block my stream for ages while fetching devicelists and bundles
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