Has a LIST command variant that combines several of the foundational
LIST commands ever been considered? With group metadata split up between >LIST ACTIVE, ACTIVE.TIMES, and NEWSGROUPS (and COUNTS if you need that
too), if clients end up needing all this info, it would be more
efficient to use one command to get it all + cut down on RTTs, etc.
InterLinked <nntp@phreaknet.org> spake the secret code <10vfdpf$12fb7$1@dont-email.me> thusly:
Has a LIST command variant that combines several of the foundational
LIST commands ever been considered? With group metadata split up between
LIST ACTIVE, ACTIVE.TIMES, and NEWSGROUPS (and COUNTS if you need that
too), if clients end up needing all this info, it would be more
efficient to use one command to get it all + cut down on RTTs, etc.
You can use multiple connections to obtain the information in
parallel.
Another use case I've encountered is being able to limit the # of items >returned in certain commands, like OVER; otherwise if you only want the
first 50 items in a group, the most efficient thing seems to be to do a >LISTGROUP first to get the bounds, but even then you still have to read
the whole response and throw it away... seems like a "LIMIT" option
would help but I haven't thought about this problem as deeply.
InterLinked in news.software.nntp:
[...]
Another use case I've encountered is being able to limit the # of items
returned in certain commands, like OVER; otherwise if you only want the
first 50 items in a group, the most efficient thing seems to be to do a
LISTGROUP first to get the bounds, but even then you still have to read
the whole response and throw it away... seems like a "LIMIT" option
would help but I haven't thought about this problem as deeply.
| GROUP de.test
| 211 613 310064 310710 de.test
No LISTGROUP needed.
Good point, but that's the easy case. If even one article is missing, you don't know where without doing a LISTGROUP. And if you don't, you could
try getting the first 50 and only end up with 40.
Also, I question if a GROUP response with no gaps can be relied upon,
given that INN advertises a false high water mark (based on the last
article received, not the highest existing article), and similarly the
count may just be an estimate. My software always tells the truth, but it seems that can't be relied on in general.
InterLinked <nntp@phreaknet.org> writes:
Good point, but that's the easy case. If even one article is missing, you
don't know where without doing a LISTGROUP. And if you don't, you could
try getting the first 50 and only end up with 40.
Also, I question if a GROUP response with no gaps can be relied upon,
given that INN advertises a false high water mark (based on the last
article received, not the highest existing article), and similarly the
count may just be an estimate. My software always tells the truth, but it
seems that can't be relied on in general.
Are you running some kind of aggressive spam filtering or otherwise
expecting to do lots of article deletion? It feels like you are heavily optimizing for groups with deleted articles, but in practice on Usenet
this is usually extremely rare, particularly if one disables
unauthenticatd cancels (which is common these days).
On most servers, the one time in a hundred when you ask for 50 articles
and only get 49 is barely worth thinking about.
I'm doing LIST, LIST ACTIVE.TIMES,
LIST NEWSGROUPS, and LIST COUNTS serially right now when listing groups
On 6/2/2026 2:02 PM, Russ Allbery wrote:
InterLinked <nntp@phreaknet.org> writes:
Good point, but that's the easy case. If even one article is missing,
you
don't know where without doing a LISTGROUP. And if you don't, you could
try getting the first 50 and only end up with 40.
Also, I question if a GROUP response with no gaps can be relied upon,
given that INN advertises a false high water mark (based on the last
article received, not the highest existing article), and similarly the
count may just be an estimate. My software always tells the truth,
but it
seems that can't be relied on in general.
Are you running some kind of aggressive spam filtering or otherwise
expecting to do lots of article deletion? It feels like you are heavily
optimizing for groups with deleted articles, but in practice on Usenet
this is usually extremely rare, particularly if one disables
unauthenticatd cancels (which is common these days).
On most servers, the one time in a hundred when you ask for 50 articles
and only get 49 is barely worth thinking about.
I don't intend to, but it's possible. I've been experimenting with
sucking articles using a reading connection recently just to toy with
what groups and articles I want. I'm down to fewer than 900 groups of
the 23,000 on Eternal September (i.e. excluding dead groups, excluding political groups, excluding spam groups, etc.), and even then,
individual groups can still get junk. Ideally, I aim to reject this all
at connection time, but as I refine my filters, I could miss something
and decide to retroactively delete received articles, especially if the group has a long or unlimited retention and there is a real cost to
keeping garbage in the spool. Besides that, was thinking about
performance in the general case, not just mine.
But it's good to know this is uncommon, thank you for that datapoint. I guess I could just blindly ask for LOW... LOW + (N - 1) for a range, and
if it comes back short and under the high water mark, then do a
LISTGROUP and proceed from there. That will probably perform better on average.
So I guess the need for "RANGE" is not very pressing, but a "LIST EVERYTHING" would still be useful. I'm doing LIST, LIST ACTIVE.TIMES,
LIST NEWSGROUPS, and LIST COUNTS serially right now when listing groups,
and since I have < 1000 groups, and I'm testing on the same test server, it's not very noticeable, but I could see this adding a lot of lag for larger/remote news servers.
Hi InterLinked,
I'm doing LIST, LIST ACTIVE.TIMES, LIST NEWSGROUPS, and LIST COUNTS
serially right now when listing groups
As LIST COUNTS contains the information provided by LIST (ACTIVE), you
could skip the LIST command when the news server advertises the LIST
COUNTS capability.
Also, I suggest that you cache the results of LIST ACTIVE.TIMES and LIST NEWSGROUPS for a given server, and that you just sent it again when
either the user wants a refresh (via a dedicated button to refresh the descriptions and creation dates) or you notice a change of status a
creation or a removal in the newsgroups list received with LIST or LIST COUNTS.
On 6/2/26 14:12, InterLinked wrote:
On 6/2/2026 2:02 PM, Russ Allbery wrote:
So I guess the need for "RANGE" is not very pressing, but a "LIST
EVERYTHING" would still be useful. I'm doing LIST, LIST ACTIVE.TIMES,
LIST NEWSGROUPS, and LIST COUNTS serially right now when listing
groups, and since I have < 1000 groups, and I'm testing on the same
test server, it's not very noticeable, but I could see this adding a
lot of lag for larger/remote news servers.
If you are not using pipelining, it is an easy win to eliminate some
RTTs when you know what you want prior and need to get it from multiple commands.-a RTT is the main benefit for inn's nnrpd right now.-a I want to take a look and see if it can also be used to build up some I/O
parallelism on the backend.
Hi InterLinked,
Assuming an average group name length of 20 characters, a server with
23,000 groups wastes an ENTIRE MB just repeating group names in
ACTIVE.TIMES and NEWSGROUPS. Put this on a 33.6k dial-up link, and you
have wasted over FOUR MINUTES of the client's bandwidth for NO reason.
You may want to use the COMPRESS command; it works pretty well on LIST responses.
Anyways, if I were to add my own non-standard LIST EVERYTHING command
(and I do plan to), would it be recommended to name it something like
LIST XEVERYTHING or can I just use whatever keyword I want?
RFC 6648 deprecated the use of the "X" prefix so you can use whatever
name you want.
Maybe LIST ACTIVE.ALL or something like that would be better than EVERYTHING?-a (What EVERYTHING refers to is not clear.)
FWIW, as you say you are nerdy and want the maximum available
information about newsgroups, the NAS protocol is worth mentioning (RFC 4707).-a I once implemented a part of it.-a Feel free to play with it:
-a-a-a telnet nas.trigofacile.com 991
You would have interesting information to show about hierarchies and newsgroups, even deleted ones :)
Unfortunately, no one maintains a NAS database with extensive data. Mine
is just a proof of concept, with only a few information manually added.
For instance:
HIER fr
611 Information follows for hierarchies
Name: fr
Status: Complete
Description: French language
Charter: http://www.usenet-fr.net/fur/usenet/presentation-fr.html
Netiquette: http://www.usenet-fr.net/fr-chartes/netiquette.html
Netiquette: http://www.usenet-fr.net/fr-chartes/savoir-communiquer.html Netiquette: http://www.usenet-fr.net/fr-chartes/emily-postnews.html Netiquette: http://www.usenet-fr.net/fur/usenet/bons-usages.html
Netiquette: http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html Netiquette: http://www.usenet-fr.net/spam.html
Rules: https://www.usenet-fr.net/creation.html
Ctl-Send-Adr: control@usenet-fr.news.eu.org
Ctl-Newsgroup: fr.usenet.distribution
Language: fr
Charset: ISO-8859-1
Charset: ISO-8859-15
Charset: UTF-8
Encoding: text/plain
Newsgroup-Type: Discussion
Hier-Type: Global
Hier-Type: Non-commercial
Name-Length: 41
Comp-Length: 18
Date-Create: 19930310000000
Source: https://www.usenet-fr.net/
Ctl-PGP-Key:
U control@usenet-fr.news.eu.org
B 4096
I 970EB10B
L https://www.usenet-fr.net/pgp-fr-2020.txt
F D5F3 69B2 9757 3622 0153-a 54E7 FA42 3E89 970E B10B
V GnuPG v2.1.18
K------BEGIN PGP PUBLIC KEY BLOCK-----
K-Version: GnuPG v2.1.18
K-Comment: fr.* hierarchy
K-
K-mQINBF+4LkcBEADLTAOPM6z/nj1zFox1KZEY44GTSwUaB5gBflJMTjC2izhh1Q6N K-bsfya4REfRijENkqOFGV/QkWQ8Va/ru+74yOKvLDdiD0RqGjvazlgvOGRLaTcxbG K-w6e4cAddbZ2O65XsqfNB+K11WQdgL42OAY6aGTrbj17rLANHFSiGd+gVhL3U3DNE
[...]
K-=vYcy
K -----END PGP PUBLIC KEY BLOCK-----
.
DATA fr.bienvenue.questions
612 Information follows for newsgroups
Name: fr.bienvenue.questions
Status: Removed
Description: Les premi|?res questions sur Usenet. (O||-a? Comment-a?) Date-Create: 19971016173454
Date-Delete: 20111219233002
Replacement: fr.bienvenue
.
DATA fr.comp.usenet.serveurs
612 Information follows for newsgroups
Name: fr.comp.usenet.serveurs
Status: Unmoderated
Description: Les logiciels serveurs de news Usenet.
Charter: http://www.usenet-fr.net/fur/chartes/comp.usenet.serveurs.html Date-Create: 20050606205005
.
Just mentioning it :)
Hi InterLinked,
Assuming an average group name length of 20 characters, a server with
23,000 groups wastes an ENTIRE MB just repeating group names in
ACTIVE.TIMES and NEWSGROUPS. Put this on a 33.6k dial-up link, and you
have wasted over FOUR MINUTES of the client's bandwidth for NO reason.
You may want to use the COMPRESS command; it works pretty well on LIST responses.
Anyways, if I were to add my own non-standard LIST EVERYTHING command
(and I do plan to), would it be recommended to name it something like
LIST XEVERYTHING or can I just use whatever keyword I want?
RFC 6648 deprecated the use of the "X" prefix so you can use whatever
name you want.
Maybe LIST ACTIVE.ALL or something like that would be better than EVERYTHING?-a (What EVERYTHING refers to is not clear.)
FWIW, as you say you are nerdy and want the maximum available
information about newsgroups, the NAS protocol is worth mentioning (RFC 4707).-a I once implemented a part of it.-a Feel free to play with it:
-a-a-a telnet nas.trigofacile.com 991
You would have interesting information to show about hierarchies and newsgroups, even deleted ones :)
Unfortunately, no one maintains a NAS database with extensive data. Mine
is just a proof of concept, with only a few information manually added.
On 6/3/26 14:30, Julien |eLIE wrote:
Hi InterLinked,
Assuming an average group name length of 20 characters, a server with
23,000 groups wastes an ENTIRE MB just repeating group names in
ACTIVE.TIMES and NEWSGROUPS. Put this on a 33.6k dial-up link, and
you have wasted over FOUR MINUTES of the client's bandwidth for NO
reason.
You may want to use the COMPRESS command; it works pretty well on LIST
responses.
I was going to suggest this as well.-a Even on localhost, the overhead of compression is lower (or at least shifts it correctly to user) than the overhead of socket buffering+wakeups for moving this type of data
between processes.
The only thing I really want from the NNTP protocol/server for readers
for csiph-web is a THREAD command because I suspect it would be a lot
more efficient to do server side but I'd need to prove it out.
On 6/3/2026 7:09 PM, Kevin Bowling wrote:
On 6/3/26 14:30, Julien |eLIE wrote:
Hi InterLinked,
Assuming an average group name length of 20 characters, a server
with 23,000 groups wastes an ENTIRE MB just repeating group names in
ACTIVE.TIMES and NEWSGROUPS. Put this on a 33.6k dial-up link, and
you have wasted over FOUR MINUTES of the client's bandwidth for NO
reason.
You may want to use the COMPRESS command; it works pretty well on
LIST responses.
I was going to suggest this as well.-a Even on localhost, the overhead
of compression is lower (or at least shifts it correctly to user) than
the overhead of socket buffering+wakeups for moving this type of data
between processes.
Sure, but again, not having to send the data *at all* means you don't
have to move *any* data around. And now you have to expend CPU cycles compressing data that wasn't needed to begin with. I get that there are workarounds, but I can simply do better.
The only thing I really want from the NNTP protocol/server for readers
for csiph-web is a THREAD command because I suspect it would be a lot
more efficient to do server side but I'd need to prove it out.
I think everything is probably more efficient for the server to do if possible, and in general I prefer the server to do as much work as
possible, though that's from my perspective of designing clients and
servers where the end work gets done on one of my machines either way at
the end of the day (and in general I prefer servers to do as much of the work as possible regardless). If I were a large scale provider,
obviously there is an incentive to force the client to do more work,
though I think that's less efficient overall. (Aside: maybe this is one reason why the big freemail providers' IMAP servers suck and have no features.)
Besides THREAD, I think there are probably other IMAP extensions that
might make sense to port over to NNTP. Maybe SEARCH, for one? Right now,
if I wanted to add a search to my online-only NNTP client, well, I can't.
Besides THREAD, I think there are probably other IMAP extensions thatSo there is some chicken-and-egg here. But from a protocol perspective
might make sense to port over to NNTP. Maybe SEARCH, for one? Right now,
if I wanted to add a search to my online-only NNTP client, well, I can't.
I guess both THREAD and SEARCH would be a pretty trivial addition -- the complexity is all on the server and client implementations to figure out.
On 6/1/2026 5:25 PM, Richard wrote:
InterLinked <nntp@phreaknet.org> spake the secret code
<10vfdpf$12fb7$1@dont-email.me> thusly:
Has a LIST command variant that combines several of the foundational
LIST commands ever been considered? With group metadata split up between >>> LIST ACTIVE, ACTIVE.TIMES, and NEWSGROUPS (and COUNTS if you need that
too), if clients end up needing all this info, it would be more
efficient to use one command to get it all + cut down on RTTs, etc.
You can use multiple connections to obtain the information in
parallel.
That's a dumb workaround for something the protocol COULD do much more >efficiently. I will not be doing that.
InterLinked <nntp@phreaknet.org> spake the secret code <10vl0uq$2hsmv$1@dont-email.me> thusly:
On 6/1/2026 5:25 PM, Richard wrote:
InterLinked <nntp@phreaknet.org> spake the secret code
<10vfdpf$12fb7$1@dont-email.me> thusly:
Has a LIST command variant that combines several of the foundational
LIST commands ever been considered? With group metadata split up between >>>> LIST ACTIVE, ACTIVE.TIMES, and NEWSGROUPS (and COUNTS if you need that >>>> too), if clients end up needing all this info, it would be more
efficient to use one command to get it all + cut down on RTTs, etc.
You can use multiple connections to obtain the information in
parallel.
That's a dumb workaround for something the protocol COULD do much more
efficiently. I will not be doing that.
I'm sorry that I solved your problem before waiting for new protocols
to be adopted worldwide across news servers.
Assuming an average group name length of 20
characters, a server with 23,000 groups wastes an ENTIRE MB just
repeating group names in ACTIVE.TIMES and NEWSGROUPS. Put this on a
33.6k dial-up link, and you have wasted over FOUR MINUTES of the
client's bandwidth for NO reason.
Anyways, if I were to add my own non-standard LIST EVERYTHING command
(and I do plan to), would it be recommended to name it something like
LIST XEVERYTHING or can I just use whatever keyword I want?
| Sysop: | Amessyroom |
|---|---|
| Location: | Fayetteville, NC |
| Users: | 70 |
| Nodes: | 6 (0 / 6) |
| Uptime: | 03:26:32 |
| Calls: | 949 |
| Calls today: | 1 |
| Files: | 1,325 |
| Messages: | 281,239 |