-
jonas’
what has time to do with that?
-
Daniel
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
-
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 :)
-
ralphm
Daniel: if you're saying there's a specific order of events that ensures you get all messages, is that documented somewhere?
-
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.
-
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.
-
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.
-
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)
-
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
-
ralphm
lovetox_: what was said is that before sending all that, you need to establish the last id you have.
-
ralphm
The rest of the order is less relevant, although there might be an optimum to minimize traffic of dupes.
-
lovetox_
you have the last ID in your database
-
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
-
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
-
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
-
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.
-
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
-
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).
-
lovetox_
ralphm what is the problem with making a query to each MUC? inefficient?
-
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
-
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
-
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
-
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"
-
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)
-
ralphm
I mean we are also sending 501 copies over the wire.
-
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
-
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
- Ge0rG is 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?
-
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
-
Daniel
ralphm, yes to all that
-
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?
-
Daniel
did someone say matrix?
-
Holger
So we get the cons of Matrix without the pros?
-
Holger
Hah.
-
Holger
Not sure we need to agree on a model though. I guess local MIX archives can remain an optional feature without introducing trouble?
-
Daniel
as long as it is advertised and clients know what to do
-
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 😃
-
Holger
This came totally unexpected.
-
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.
-
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?
-
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.
-
ralphm
😭
-
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.
-
ralphm
Ge0rG: maybe.
-
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.
-
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
-
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
-
Daniel
there are forked versions of Conversations that do the gajim for that purpose
-
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.
-
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?
-
lovetox_
a windows where history shows✎ -
lovetox_
a windows where you can browse history ✏
-
lovetox_
search filter etc
-
Ge0rG
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
-
Ge0rG
Yesterday I ran hashcat on my laptop's Intel GPU. There was a frightening smell of something burnt. And space bar heating.
-
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
-
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
-
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
-
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
-
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
-
nyco
time?
- ralphm bangs gavel
-
Guus
I'm just being called
-
ralphm
0. Welcome + Agenda
-
Guus
I'll lurk for the duration of this call
-
ralphm
Hi all!
-
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
-
ralphm
Guus: no worries
-
nyco
for a good or a bad news?
-
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
-
nyco
or every 14 days
-
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
-
ralphm
Right
-
ralphm
So, my summary: overwhelming support for https://opensourcedesign.net/jobs/jobs/2019-03-19-design-of-badges-for-different-xmpp-compliance-levels
-
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
-
Ge0rG
nyco: please do
-
Ge0rG
ralphm: I don't mind, as long as we are making progress here
-
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
-
ralphm
+1
-
MattJ
+1
-
nyco
+1
-
nyco
who's in charge?
-
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
-
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 :)
-
nyco
who can grant that?
-
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...
-
MattJ
pep., get cape, wear cape, fly!
-
pep.
o/
-
ralphm
Ah, I'm sure jonas’ can help out
-
nyco
destroy Thanos
-
ralphm
or stpeter
-
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
-
Seve
great*
-
ralphm
Ge0rG: but I'm not sure how 2020 could contain stuff that isn't mostly already there in some ways
-
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
-
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
-
ralphm
7. Close
-
ralphm
Thanks all!
- ralphm bangs 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!
- Ge0rG suppresses a sarcastic email about the email archive not being accessible anyway.
- Ge0rG suppresses a sarcastic comment about the email archive not being accessible anyway.
-
jonas’
well done, Ge0rG!
-
nyco
both done
-
ralphm
Nice
-
jubalh
> I'm living between Munich and Stuttgart (South Germany) Not far from me
-
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
-
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?
-
Zash
<stanza-id>
-
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?
-
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?
-
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.
-
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
-
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?
-
pep.
Well, yeah it's synchronized
-
Zash
Ge0rG: Make it a MUST for routing 2.0 or whatsitcalled
-
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
-
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
-
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
-
lovetox
i query whatever needs to be queried
-
pep.
(chatstates, etc.)
-
pep.
(and other plugins)
-
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✎ -
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
-
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
-
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.
-
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 :)
-
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.
-
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