NewsPlex for Unix
Version 4.5  June 2009
Copyright © 1999-2009 by Adam Mirowski

Introduction

Overview

NewsPlex is a news-server multiplexer. It allows any news-reader to access several news-servers simultaneously, by merging their content transparently into one single virtual news-server. NewsPlex merges the lists of news-groups proposed by different news-servers into one single list, and for each news-group, it merges the lists of articles available on different news-servers into one single list of articles. For each active news-group, NewsPlex maintains an index, and when a news-reader requests an article, NewsPlex forwards this request to the appropriate news-server.

Additionally, NewsPlex can be used to quickly explore large lists of candidate news-servers and evaluate their service value. This is called the Minimal mode.

NewsPlex runs on your own machine (or possibly on some other machine), in the background, and appears as a standard news-server to your news-reader and as a news-reader to your news-servers. It is therefore somewhat similar to a proxy or to a web cache.

NewsPlex runs on Windows (95/98/Me/NT/2000/XP), OS/2 and Unix (Linux, Solaris, FreeBSD and Windows's Interix subsystem). This version and this manual are for Unix.

Skip to Installation

Features

Full news-group list

NewsPlex is able to efficiently manage the full Usenet news-group list, which has over 150,000 entries today.

Handling of news-groups is deferred. All news-groups are originally in the inactive state. This allows to reduce disk, cpu and network usage and was a prerequisite for handling the full news-group list. The activation of a given news-group is performed automatically, when a news-reader accesses it, ie. requests the list of articles it contains. Up to a few thousand news-groups can be activated before performances drop.

The first time a news-group is entered, NewsPlex generates an internal article announcing that the news-group is now being downloaded, starts downloading the news-group from all news-servers, waits for a few seconds to have a chance of getting some real articles, and returns the resulting list to the news-reader. The full news-group contents will be available a few moments later.

Configuration

NewsPlex is plug-and-play. When run for the first time, it will auto-configure itself to handle the full list of news-groups and to use all the news-servers which it can find on your local network or referenced in files on your machine. It will complete this list with a few dozens of well-known specialized news-servers.

It is later possible to add or remove news-servers. It is also possible to restrict the group list, for example to save memory. It is also possible to improve performance by either tuning some parameters or activating features like the asynchronous article retrieval.

NewsPlex is controlled through command-line options and configuration files at startup time, or dynamically, from a Web browser or by telnetting into it. The provided NpNNTP command line utility can be used to issue commands to NewsPlex, for example from shell scripts.

Clients

NewsPlex can service several news-readers at the same time. This notably allows to control it from the network while it is already being used by some news-reader.

NewsPlex constantly monitors whether the news-reader which has requested an article is still there to receive it and has not disconnected in the meantime. If not, it stops the retrieval tentatives immediately.

NewsPlex can be seamlessly inserted between your existing news-server and your news-reader, without disturbing the list of news-groups or the article numbers. Note: this feature is currently broken.

Access

NewsPlex allows optional login/password authentication of users. It offers two levels of access: ordinary/user and privileged/administrator.

It is possible to restrict access to only news-readers running on the same computer.

Background operation

NewsPlex can be run in the background, permanently. It will explore news-servers periodically to maintain its article database up to date.

NewsPlex does not need to be stopped if the network connection goes down, for example because you disconnect from your ISP. It will wait until the connection is up again and continue operations.

Performance

NewsPlex always uses the best news-server for requesting an article, among those having it. It will use the remaining news-servers if the best one could not deliver the article. Servers are rated dynamically according to current speed, best speed obtained in the past, latency and availability.

NewsPlex remembers errors occurring in the middle of an article retrieval, typically news-server timeouts or unexpected connection terminations, and will try to use a different news-server as source the next time the article is requested.

Error isolation

NewsPlex is able to use any news-server as news source, even news-servers which implement very old versions of the news transfer protocol, and yet always exports a modern interface to news-readers. Errors occurring during the exploration of news-servers are also recovered, through either restarts, deferring or workarounds. article descriptions imported from news-servers are carefully checked for correctness. Those which appear garbled, typically a result of overruns in the news-server, will be asked for again, as long as progress is made. In non-recoverable situations, bad article descriptions are ignored and not stored in the article database; a correct version will most probably be available from some other news-server. NewsPlex is able by itself to fix incorrect or missing Bytes, Lines and Message-ID information for articles (in the last case, a Message-ID of the time-stamp@newsplex or similar form is generated). Such errors do not cause rejection of article descriptions.

Tricky situations

NewsPlex supports connecting to news-servers either directly, or through proxy servers (SOCKS 5, SOCKS 4, HTTPS, simple tunnels or Sun-specific).

NewsPlex can be used as a client of another NewsPlex. It can even be a client of itself, although this normally happens only accidentally, if a given news-server name resolves to a local IP address.

Filtering

NewsPlex can filter out unwanted articles, based on the From:, Message-ID, Subject: and other fields of article descriptions. Wild-cards are supported.

NewsPlex automatically removes junk lines from the headers of posted articles and does not add lines of its own. Through extra header lines, news-readers tend to disclose more information about your software and hardware configuration than what you usually want other people to know, and this cannot generally be disabled by other means. Currently, the Sender, User-Agent, X-Accept-Language, X-Binary-Poster, X-Converter, X-Hamster, X-Korrnews, X-Mailer, X-MimeOLE, X-MSMail-Priority, X-Newsposter, X-Newsreader, X-Posting-Agent, X-Priority, and X-WM-Posted-At lines are eliminated. This can be adjusted thru clients.junkPostedHeader= settings. Note that some news-readers also embed identification into the standard Message-ID header line. Typically, this can be a prefix like <Xns or a suffix like @4ax.com>. NewsPlex does not modify this Message-ID line by default, but you can use the clients.junkPostedHeader= setting to strip it as well. It is also sometimes possible to ask the news-reader to not provide it. When a posted article does not contain a Message-ID, the news-server will generally generate one by itself. NewsPlex can of course do nothing about header fields added by the news-servers themselves.

Asynchronous article retrieval

NewsPlex supports asynchronous article retrieval. Instead of providing an article immediately, NewsPlex can instead simply remember that it has been requested and retrieve it independently and in parallel with the news-reader operation. The news-reader is either returned a fake article, which only informs about the asynchronous article retrieval in progress, or told that the article has been deleted. The real article will be available in the async news-group, managed locally by NewsPlex, as soon as the retrieval finishes. Having asynchronously retrieved articles visible in a separate news-group allows to use the news-reader facilities for merging multi-part postings. NewsPlex slightly changes the Message-IDs inside asynchronously retrieved articles, so that news-readers able to detect cross-posts consider them as different from the fake articles returned initially.

asynchronous article retrieval allows to accelerate retrievals by parallelizing operations and eliminating idle moments.

An arbitrary number of article retrievals can be scheduled, and up to 4 retrievals are performed at once (this can be adjusted with the async.simultaneous= setting in etc/newsplex.ini). NewsPlex remembers which articles remain to be retrieved even across shutdowns and restarts and finishes retrievals the next time it is run.

You are not obliged to access the asynchronously retrieved articles through the async news-group, because asynchronously retrieved articles are also visible as async/xxxxxxxx.ok files. If articles contain binary attachments, you can directly run arbitrary decoding tools on the files and even delete them when done.
Since version 3.6, the NpUud uudecoding utility is provided and since version 3.7 it also supports the yEnc format, which notably offers reliable decoding and automatic multipart merging. NpUud can extract the binary attachments from any file and put whatever remains into a separate .hdr file named after the first attachment.
The async.executeCmd= setting in etc/newsplex.ini allows to specify the program which will be run each time a new async/xxxxxxxx.ok file is created.

When to use NewsPlex?

NewsPlex is useful when your main news-server does not offer all the news-groups you want to read, or when these news-groups are incomplete (for example some articles are filtered out or parts of multi-part posts are missing), or when the expiration delays for articles are too short.

If your news-servers are unreliable, become easily unreachable or give timeouts, NewsPlex will isolate you from these errors, perform the necessary retries in the background and keep you posted with the latest news in the minimal time and without drudgery.

Few news-readers allow using several news-servers at the same time, and very few can take articles from several news-servers for a single news-group transparently, or request an article from different news-servers until successful. NewsPlex allows you to choose your news-reader on other criteria than these abilities.

Because NewsPlex can service many users at the same time, running on a well-known machine on your local network, it can avoid everybody the work to setup and maintain a multi-server configuration themselves and can globally reduce the amount of data transferred with the Internet.

Author

Adam Mirowski <mirREMOVETHIS@vlxREMOVETHIS.com>

NewsPlex version 4.5 is freeware. It is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. You can use it at your own risk, and report whatever problems you have encountered with it. You are free to copy this software ONLY if you include this document file and all the other accompanying files with it. You may NOT charge anyone for a copy of this software other than a small copying fee. You may NOT include this software with any commercial software without the written consent of the author.

Installation and configuration

Unpack the NewsPlex distribution archive to any directory. You should notably have the executable file newsplex and a help file newsplex.htm in HTML format, which you are currently reading. There should also be a boilerplate file file_id.diz and a descript.ion file with descriptions of all the files in the distribution. There are also several utilities provided, which can assist you with dealing with binary and text files of various types.

Because of the auto-configuration feature, you can start NewsPlex without providing any command-line options or configuration files.

Start

You can start NewsPlex by typing its name. The first time it is run, NewsPlex just creates configuration files, fills them with default settings and exits. The default settings include a default list of news-servers to use (except in minimal mode, set thru a command-line option). You can then edit the created files, and run NewsPlex again.

Then you can connect your news-reader to machine name localhost (or Internet address 127.0.0.1) and the standard NNTP port 119. NewsPlex will need to connect to at least one news-server and start getting the news-group list from it before offering news-groups other than the async news-group.

Stop

To shutdown NewsPlex, send it the SIGINT signal either from the keyboard if NewsPlex runs in foreground, using the Ctrl-C or Del keys, or with the kill command. Sending a second SIGINT signal or any other signal will terminate NewsPlex unconditionally.

It is also possible to stop NewsPlex from the Web browser interface or by telnetting into it (telnet localhost 119) and entering the NPSHUT command. This command can also be sent with the NpNNTP utility.

Uninstall

To uninstall NewsPlex, just delete the directory from which you started it (or the work directory specified with the -d command-line option) and the directory to which you unpacked the distribution files; this is usually the same directory. If you just want to delete the generated files, run the program with the -C command-line option. NewsPlex never writes or modifies anything outside of its startup directory or the -d directory.

The configuration files

NewsPlex accepts many settings thru the etc/newsplex.ini, etc/servers.ini and etc/filters.ini files. They are ASCII files, and are organized into sections and entries, just like old Windows .ini files.

Sections are introduced by [section-name] lines, while entries are lines of the entry-name=value form. Entry names are not case-sensitive, but string values can be sometimes.

Certain sections and entries can be repeated. Repeatable sections will create several objects of the same type, eg. each [server] section in etc/servers.ini describes a single news-server. Repeatable entries will create arrays of objects, eg. comment= settings create multiline comments. If a given section or entry type is not supposed to be repeated, it will just update the value(s) of the previous section or entry of the same name. In this case, when NewsPlex rewrites the .ini file, only one such section or entry is written.

This manual often uses the section-name.entry-name notation in order to refer to entry entry-name in section section-name.

In the descriptions, boolean settings are shown with their non-default (active) values.

If a setting is not present, NewsPlex will use the default hard-coded value.

This release of NewsPlex does not yet offer the possibility of modifying all the settings in the .ini files from the Web interface. You will have to edit the files by hand therefore.

If you modify them, you will need to restart NewsPlex before the modifications are taken into account. The restart can be performed from the Actions web page, with the NPRESTART command or by shutting down NewsPlex and re-running it. Note that certain files are rewritten automatically on exit. This can be disabled however.

The etc/servers.ini file

This file contains the list of news-servers to use and their configuration settings.

It can also specify which proxy, if any, should be used for accessing a given news-server (see a specific chapter below).

There are 4 possible types of sections:

[file] section

This section hosts comments for the file.

Setting Description
comment=string1
comment=string2
...
Allows to add comments to the file. Can be repeated as many times as necessary, to create multiline comments. Comments will be preserved if this file is rewritten.

It is also possible to have comment lines starting with ; or #, but such comments are not preserved if the file is rewritten.

[server] sections

Each [server] section defines a single news-server.

There are no equivalents to the old exit and dontexplore keyword lines. The first one would make little sense, as NewsPlex must be able to parse the etc/servers.ini file entirely to be able to rewrite it later without losing information. For the second keyword you can use the cut and paste facilities of a text editor to add an explore=0 setting to every news-server which requires it.

Setting Old news-server flag Description
id=server-number   server-number must be unique for each news-server and greater than 0. It identifies the news-server in the article database and must not be changed after a news-server has been explored.

It is computed automatically if not provided; the etc/servers.ini file is rewritten afterwards.

url=server-url   Should be the URL (Uniform Resource Locator) of the news-server, that is its Web address. It must contain at least the hostname of the news-server, and can optionally contain the news:// prefix, the login name, the associated password and the port of the news-server. A given login name, hostname and port combination can be provided only once because it is used to construct a unique name for files in explore and newsrc3 directories.

Some examples:

        [server]
        url=news://news1.yourisp.com
        comment=news-server without login
        [server]
        url=news://mylogin:mypass@news2.yourisp.com
        comment=news-server with login
        [server]
        url=news3.yourisp.com:4000
        comment=news-server on port 4000
        
If you need to pass funny characters in the login or in the password, use standard % escape sequences: a % character followed by the hexadecimal ASCII number of the offending character. For example:
  • @ can be escaped as %40
  • : as %3A
  • a blank as %20
So if the login is for example ano:nymous and the password joe@domain.com, the resulting url= setting will be url=ano%3Anymous:joe%40domain.com@newshost.com
disabled=1   The news-server is disabled. It still has a server-number, but is generally not used in any way until it is reenabled. Currently, re-enabling can be only done by editing the etc/servers.ini file by hand.
addedDateSecs=value
addedDateString=string
  NewsPlex automatically generates these settings when noticing a news-server for the first time in the file.
adjustMaxConnections=count R, r Adjust the default maximum number of simultaneous connections allowed to a news-server (4) by the specified amount, positive or negative.

Increasing can be useful with news-servers which limit the speed but do not limit the number of simultaneous connections. You will also need to increase the maximum number of simultaneous asynchronous article retrievals if you increase this per-news-server setting beyond that value, otherwise it will not be effective.

Decreasing can be useful with news-servers for which the default limit is too high, for example because their owners charge you per connection count or per connection time. Decreasing too much will prevent NewsPlex from using the news-server at all.

attemptMsgId=1 a Attempt retrieval of articles even if the news-server does not have the news-group or the requested articles in that news-group. Every time an article is requested, NewsPlex will attempt to retrieve it from the news-server as well.

Some news-servers have articles which are not or which are no more referenced in any of their news-groups. It is still possible to retrieve them by Message-ID. NewsPlex normally attempts this during zombie retries. Passing this option allows to do it for specific news-servers all the time.

blindLogin=1 n Blind login. Do not wait for the news-server welcome message and issue a command immediately, typically an article download request. This setting is useful with certain news-servers only, which issue the welcome message with a delay, and in the meantime accept other commands.
category=category tcategory Set the category of the news-server, ie. its download priority, to value category, which can be negative, 0 or positive. Zero is the default value. This allows to enforce the order in which news-servers are used for downloading articles. NewsPlex will not use a news-server with a higher category until it has tried to get the article from news-servers of lower categories.

NewsPlex will only wait for the number of secondes defined by the connect.maxCategoryWait= setting before trying to use a higher category news-server if it cannot obtain a connection to any news-server from the current (or lower) categories.

You should set reuseForAsync=0 (Do not reuse the news-server for an asynchronous article retrieval after it becomes free) for news-servers for the categories to be fully effective during async retrievals. See here for more details.

closeOnListOk=1 C Consider that errors occurring when NewsPlex is listing available news-groups on the news-server indicate the end of list. This allows to use otherwise unusable news-servers.
cost=value cvalue Define a cost for news-server. The value will be considered as the number of kilo-bytes per second to subtract from the news-server 's score when evaluating it in order to retrieve an article.

Note that the cost notion only applies after the category notion, which means it is only used among news-servers of the same category.

daysTooOld=days ydays Limit the age of article descriptions added from this news-server to the article database to days days. By default, the age is not limited. This setting takes precedence over the explore.daysTooOld= setting in etc/newsplex.ini. See also the NPDELETEOLD command.
explore=0 U Enable or disable the automatic exploring of the news-server. If 0 is passed, the news-server will not be explored periodically, it will also not be explored after a news-group has been activated and it will not be explored after an article has been posted to it. The operator can still request a single exploration with NPEXPLORESERVER or thru the Web interface.
This setting can be interestingly combined with the attemptMsgId= setting, to create a news-server where NewsPlex tries to take articles from blindly, by Message-ID, without ever asking for anything else.
emulateXoverUsingHead=1 H Use HEAD requests rather than XOVER requests to obtain the article descriptions from the news-server. NewsPlex normally does this automatically when necessary, but you can force it, for example if XOVERs are slow. See also the emulateXoverUsingXhdr= setting.
emulateXoverUsingXhdr=1 x Use XHDR requests rather than XOVER requests to obtain the article descriptions from the news-server. You can set this mode of operation if XOVERs are slow. See also the emulateXoverUsingHead= setting.
enforceForbiddenIPs=0   Defines whether the connect.forbiddenIP= settings are taken into account for this news-server. You most probably must set this setting if you are using a news-server located on your local network and this network uses private, non-routable IP addresses.
There is also a global connect.enforceForbiddenIPs= setting. Both settings must have non-zero values for forbidding to be active.
extraConnectTime=value X Give extra time to news-server for responding when connecting. Some overloaded news-servers may need this. Use this setting if the news-server can be normally connected at TCP level, but subsequently does not send a welcome message before NewsPlex stops waiting and considers the connection as failed. Only use this setting on good news-servers, because it increases the time before NewsPlex declares forfeit on retrieving an article and hence may slow down things actually.
extraTime=1 T Give the news-server much more time to answer requests. This allows to avoid disconnects with news-server which take a lot of time to answer some requests, and hence for example it is not possible to complete an exploration successfully.

Note that if a news-server is given more time, NewsPlex will also wait longer before switching to another news-server which could provide the same article.

filterArticles=1   Apply filters from etc/filters.ini in real time during explorations. Matching articles will immediately be either rejected or marked as hidden.
Filtering also can be forced globally using the explore.alwaysFilter= setting.
groupBeforeMsgId=1 B Issue a GROUP request before an article retrieval by Message-ID if the group where the article is located is known. This is normally unnecessary, but might help with some news-servers.
ignored=entry-name1=entry-value1
ignored=entry-name2=entry-value2
...
  When NewsPlex encounters invalid, possibly obsolete entries, it stores them in this setting.
ignoreGroup=group-name1
ignoreGroup=group-name2
...
g(group-name1 group-name2...) Do not explore specific news-groups on the news-server. Set this option if accessing a certain news-group causes malfunction of the news-server, like disconnects or indefinite waits, or if the news-group contains too many corrupted article descriptions on the news-server. This setting can be repeated.
ignoreLoginFailure=1 i Ignore login failure. NewsPlex will attempt to use a news-server even if the login sequence failed.
isSlow=1 S The news-server is slow, so do not use the LISTGROUP or XHDR LINES requests for getting the article numbers, but rely on the results on the GROUP request instead.
keepAlive=1 A Keep-alive the news-server for 15 minutes after it was last used. Normally, connections to idle news-servers are closed after 5 minutes, without keep-alive.

Independently of this setting, NewsPlex will automatically keep-alive a news-server if it appears as difficult to connect to, for example because it limits the number of concurrent users and is very popular at the same time. A news-server will also be put on keep-alive if it closes the connection immediately after a TCP connect.

The NPCONNECTED command and the Web page ignore the keep-alive when displaying the duration of idleness for news-servers.

listgroupDoesNotSetGroup=1 O LISTGROUP does not set the current news-group. This setting allows to deal with news-servers which do not adjust the current news-group when receiving the LISTGROUP news-group request. This is not so easy to detect automatically, hence this setting.
listgroupGroup=group-name1
listgroupGroup=group-name2
...
l(group-name1 group-name2...) Use the LISTGROUP request instead of GROUP to select the specified group-name news-group on the news-server. This setting can be repeated to define as many news-groups as necessary.

This option sometimes allows to access specific news-groups on news-servers which normally forbid entering them thru the standard GROUP request, although they do have them and are able to provide article lists and articles from them normally.

Such news-servers should normally have the attemptMsgId=1 setting set for them. However, just because a news-server is able to provide an article by Message-ID does not mean it has the news-group or that it allows listing it. For example, articles could appear in a common junk newsgroup.

Instead of using the GROUP request in order to select a specific news-group on the news-server, NewsPlex will use the LISTGROUP request. This request, in addition to its normal behavior of listing the available article numbers in the news-group, also almost always sets the news-group as the current news-group. NewsPlex will simply ignore the article numbers and use the side effect.

Because such inaccessible news-groups are usually not listed in the news-group list, the listgroupGroup= setting also adds the specified news-group names to the list of active interesting news-groups on the news-server. It is therefore not possible to have wild-cards in the news-group names.

listgroupIfGroupFails=1   Attempt to use the LISTGROUP request to change the current news-group if GROUP did not work. This setting is similar to the listgroupGroup= setting, except it is only used in error circumstances and does not make NewsPlex consider that the news-server has specific news-groups. It is not compatible with the listgroupDoesNotSetGroup= setting.
listPreferred=1 L When constructing the list of interesting news-groups offered by the news-server, request the full list and filter it locally instead of requesting only the names of news-groups matching groups.yes= settings. This is the per-news-server version of the explore.alwaysLIST= setting in etc/newsplex.ini.
main=1 m This news-server is the main news-server (the notion is explained below). Only one news-server can be main.
msgIdIfNbFails=0 M Do not try to get articles by Message-ID from this news-server. NewsPlex tries to retrieve an article by Message-ID if the article cannot be retrieved by number from its news-group, typically because it has been deleted from it. However, some news-servers stop responding in such circumstances, presumably because the search for the article in other news-groups takes a lot of time.
numbersCollapseMinDistance=value
numbersCollapseMaxRanges=value
  These settings individually replace the global [explore] settings of the same name (please refer to them for explanations) if the value is non-zero.
postingGroup=group-name-pattern1
postingGroup=group-name-pattern2
...
  Define the news-server as the posting news-server for the specified news-groups. Wild-cards can be used in names and this setting can be repeated.
privateProxy=proxy-url1
privateProxy=proxy-url2
...
o(proxy-url1 proxy-url2...) This setting, which can be freely repeated, allows to specify per-news-server proxies, which do not need to (and also even cannot) be explicitly given a proxy id. Use this option if you do not want to manage the global numbering of proxies yourself. More about proxies in the [proxies] section.
retrieveArticles=0   Do not retrieve articles from this news-server even if it does have them. This setting is for example useful when an otherwise good news-server contains a corrupted version of an article and you want NewsPlex to attempt retrieving it from some other news-server instead, the next time the article is requested by a news-reader. You can also use the NpNNTP utility to download the article directly, if you know what news-server contains a good copy.
reuseForAsync=0 D Do not reuse the news-server for an asynchronous article retrieval after it becomes free. Using this setting for news-servers which do not allow many simultaneous connections should give the news-reader less 500 No server having article is reachable errors if the news-reader tries to retrieve some articles directly when asynchronous article retrievals are enabled. See here for more details.
xhdrMessageIdAllowNumberNotGreater=1
xoverAllowNumberNotGreater=1
  These two settings allow to properly explore some broken-by-design news-servers. The server.xhdrMessageIdAllowNumberNotGreater= setting makes NewsPlex stop requiring that the list of article number-Message-ID mappings returned by XHDR MESSAGE-ID has strictly progressing article numbers. The server.xoverAllowNumberNotGreater= setting does the same for the list returned by XOVER.
xoverOnEmpty=0 E Some news-servers do not like that news-readers request the article descriptions for empty groups, and start providing corrupted article descriptions from this moment. This option avoids this.
truncAfterMsgId=1 I Allow certain article description truncations to occur after the Message-ID field and still accept the article description. NewsPlex only accepts cuts which do not look like a corruption which could be recovered by asking for the article description again, and cuts in the middle of article threading references, since some news-servers limit article descriptions to an arbitrary length and this cut-off falls there.
useFakes=1 F If the news-server fails to provide descriptions for articles which he has previously declared as available, consider these articles as permanently unavailable.

If in the news-server exploration logs you see that for certain news-servers NewsPlex keeps exploring certain articles ranges without getting any article descriptions, you might set this setting. This however introduces a penalty: if the news-server generates article descriptions out of order and at the same time declares the numbers in advance, you might not get all the article descriptions.

Note that when this option was introduced, NewsPlex did not yet implement the collapsing of neighboring article number ranges, so today it is less interesting.

useXrefs=0   Use or do not use the cross-reference information provided by the news-server within the article descriptions (the Xref: tags or lines) to update other news-groups than the one currently being explored with information about cross-posted articles.

The explore.useXrefs= setting in etc/newsplex.ini allows to disable this globally.

xgTitleBroken=1 G Do not use the XGTITLE request for getting the list of groups. This setting is equivalent to the explore.noXGTITLE= setting in etc/newsplex.ini except it only applies to one news-server.
zombies=0   If zombies are disabled for a news-server, when the last news-server reference to vanish for an article is from this news-server, the article will not become a zombie, but will be marked as deleted and later removed from the article database.

You can only disable zombies this way on news-servers which are the sole source of their articles. For example, someone can cancel and reissue an article on a company internal news-server, and it is pretty sure that the original article will not appear again on another news-server. If you disable zombies using this setting for a general purpose news-server, and the article becomes available again from some other news-server before it is actually removed from the article database, it will remain deleted.

Zombies are still created when invalid news-server references are deleted from the article database.

comment=string1
comment=string2
...
#... A comment for the news-server. This setting can be repeated, to create multiline comments.
  N The flag can be displayed, but there is no corresponding setting. The news-server most probably does not allow posting, at least this is what the welcome message says.
  P The flag can be displayed, but there is no corresponding setting. The news-server probably allows posting, at least this is what the welcome message says.

Main news-server

You should select your existing news-server as the main news-server. NewsPlex will then synchronize with it when run for the first time, so as to provide the same news-groups and article numbers. This way, your news-reader will not be confused about which articles have already been read and which have not. NewsPlex will then complete the list of news-groups and articles with what other news-servers offer. Note: this sync feature is currently broken.

The main news-server is used for posting articles by default. The NPPOSTSERVER command can be used to change the posting news-server globally at any time, or to view the current selection.

If you do not select any news-server as main, NewsPlex will consider all the news-servers as equivalent, explore them simultaneously, and number articles starting from 1 up.

[proxies] section

By default, NewsPlex attempts to connect to news-servers directly. It is however possible in the etc/servers.ini file to specify a proxy for each news-server. Several proxies can be used at the same time, and each news-server can be accessed through a different proxy if necessary.

The simplest way of defining proxies is to do this individually for each news-server, using server.privateProxy= settings in [server] sections.

Otherwise, you can define proxies globally. This allows to use the same proxy for several news-servers, at the inconvenience of having to give them unique numbers.

In this second case, first, define a [proxies] section, and put inside the list of proxies you intend to use, with entries like this:

url=proxy-url,proxy-group-number

The proxy-url must start with the proxy type, either none, or socks5://, or socks5b://, or socks4://, or socks4b://, or https://, or tunnel://, or sun://.

none means that no proxy should be used and the connection can be established directly. This is the default way of connecting to news-servers.

If the type is not none, the proxy-url should then specify the name of the proxy server and potentially its port as well as the login and the password if necessary. The default ports are:
PortProxy types
1080 socks5
socks5b
socks4
socks4b
443 https
3666 sun
By default no login or password information is sent.

tunnel proxies are proxies which only allow to access a single machine, and which connect to it automatically after being connected to. Since they appear just like normal news-servers, they can be specified instead of news-servers in the etc/servers.ini file. However, if a given news-server can be accessed through several such proxies, it is interesting to define them as tunnel proxies instead, because this will make NewsPlex try them in sequence when connecting to the news-server. Note that unless one of the proxies specified is not none, the original news-server will not be contacted directly anymore, so its name will not matter. Tunnel proxy URLs have the default port equal to the port of the URL to which they are used to connect.

The proxy-group-number must be a small integer number. It allows to identify a proxy and to reference it from a news-server entry. The default proxy-group-number is 0.

Note: socks5b servers are buggy socks5 servers and socks4b servers are buggy socks4 servers. If you observe that NewsPlex is unable to connect at NNTP level to any news-server, and the logs/results file shows truncated welcome messages from them, with missing first 6 chars (eg. instead of 200 newsservername... you see wsservername..., and instead of 502 You are not allowed to talk you see u are not allowed to talk, use socks5b instead of socks5 and socks4b instead of socks4 to define the type of your proxy.

For each news-server entry, it is possible to reference the proxy in the server-url by appending a final ,proxy-group-number to it. By default, value 0 is assumed. To quickly modify a etc/servers.ini file used on a direct Internet connection so that it can be used on a proxy-ized Intranet connection, just add an initial line defining proxy 0. Example:

[proxies]
url=socks5://login:pass@socksproxy:1080,0
url=proxy none,1
url=proxy sun://oursunproxy,2

[server]
url=news1.yourisp.com,0
comment=news-server outside, will go through proxy 0

[server]
url=mylogin:mypass@companyserver,1
comment=news-server on local network, no proxy

[server]
url=news3.yourisp.com:4000,0
comment=another outside news-server, use proxy 0

[server]
url=news4.someisp.com,2
comment=go through sun proxy 2 to reach this
Note that all ,0 are actually unnecessary.

If no proxy is defined in proxy group 0, NewsPlex will automatically assume a direct connection for this proxy group, that is, create an implicit proxy none,0 entry. This allow to not define any proxies in the etc/servers.ini file if the connection is always direct.

Proxy groups

Several proxies can have the same proxy-group-number and hence constitute a proxy group.

NewsPlex will use the first proxy defined in a given proxy group, except if the news-server indicates that it does not allow additional connections from this proxy (or from your host, if the proxy is none).

In such a case, NewsPlex will try to use the next proxy from the same proxy group, so that the news-server thinks a different news-reader is connecting. NewsPlex will also try to use a different proxy from the same proxy group if the current proxy indicates that it does not authorize establishing the NNTP connection. Finally, NewsPlex will try to use another proxy if the first one could not be connected to. NewsPlex will not try to use another proxy if the news-server is simply not reachable from the first proxy in a proxy group.

[proxychain] sections

Sometimes, it is not possible to reach news-servers using a single proxy. For example, this proxy might not allow establishing NNTP connections but might be the only way out of an intranet.

To deal with this situation, NewsPlex supports proxy chains. This means that it can use a proxy to reach another proxy, and then use this second proxy to actually connect to a news-server.

After proxies have been defined in the etc/servers.ini file, you can chain them using the proxychain directive:

[proxies]
url=socks5://intranetproxy,0
url=socks5://externalproxy,1

[proxychain]
proxyGroup=0
proxyGroup=1

[server]
url=news.somedomain.com,0
Here, proxy group 1 is chained behind proxy group 0. Every connection going through proxy group 0 will transit through proxy group 1 before reaching the news-server. Referencing proxy group 1 directly remains possible.

Only two components are allowed in proxy chains. A single proxy group can appear only once in the first position of a proxy chain.

If the second proxy group has several proxies, only the first one defined will be used. However, all proxies in the first group will be tried if necessary.

Proxy chains are longer to establish and slower in operation than ordinary proxy-based connections, which themselves are worse than direct connections. They also require that the first proxy does not forbid connecting to the second one. In the above example, intranetproxy must allow connecting to port 1080 on externalproxy.

The etc/newsplex.ini file

The etc/newsplex.ini file replaces most of the command-line options which existed in pre-4.0 versions of NewsPlex and most of the other config files.

Do not edit this file while NewsPlex is running with the shutdown.updateNewsplexIni= setting, because your modifications would be overwritten.

In the description below, boolean settings are shown with their non-default (active) values.

[async] section: Asynchronous retrieval settings

Setting Old command-line option Description
simultaneous=count -a Perform count asynchronous article retrievals at once instead of default 4, if asynchronous article retrieval is enabled. This parameter should be equal to the speed of your Internet connection divided by the average speed of your news-servers. Passing 0 will disable the retrieval of articles scheduled for asynchronous article retrieval.
lineTrigger=min-lines -g Enable asynchronous article retrieval for articles longer than min-lines lines and which seem to contain binaries (NewsPlex looks at article subjects to decide about that, using the binaryFilter= settings described below). If min-lines is preceded with a minus, all articles longer than min-lines are retrieved asynchronously. Value 0 disables asynchronous article retrieval.
reportAsDeleted=1 -L Makes NewsPlex return an article deleted status to the news-reader when an article retrieval is scheduled. Use it if you do not want to see the fake articles and/or do not want to have to delete them.

When activating this setting, you probably should configure your news-reader to not automatically combine parts of multi-part postings (except for the async group), because news-readers will usually stop retrieving further parts if they encounter a missing part in the middle.

Note that NewsPlex can properly deal with news-readers which request an article by Message-ID if they could not get it by number, and avoids scheduling the same article for asynchronous article retrieval twice.

executeCmd=program-name [args...] -X Defines the program which should be run every time NewsPlex finishes retrieving a async/xxxxxxxx.tmp file in the async directory, but before renaming it into async/xxxxxxxx.ok. This program could for example be a uudecoder or a MIME attachment extractor. It can do whatever it wants with the async/xxxxxxxx.tmp file, even delete it.

The program is only run if the associated boolean executeYes= setting is set.

The NpUud program provided with NewsPlex is run by default, with options which make it decode all files to the decoded subdirectory of NewsPlex 's work directory, to subdirectories named after the Date: lines of articles.

The program will be given the full pathname of the async/xxxxxxxx.tmp file.

NewsPlex can run several copies of the program in parallel. It is up to the tool to perform necessary synchronization.

executeYes=1   Enables the actual usage of the program defined by the executeCmd= setting.
binaryFilter=pattern1
binaryFilter=pattern2
...
  Define a single pattern for detecting article Subject: lines which indicate binary attachments. The pattern needs to cover the entire Subject: line, so it will most of the time start and end with * wild-cards.
This setting can be repeated, to define additional patterns.
Patterns can also be defined to exclude matching Subject: lines from being considered as indicating binary attachments. Excluding patterns must start with a ! exclamation point. They must appear first.
Note that defining even a single pattern thru this setting disables all the default patterns hard-coded into NewsPlex.
serverAvailable=count   Defines how many server-available asynchronous article retrievals will be conducted at once. The default is 4. Value 0 will disable such retrievals. See elsewhere in this document for the discussion about normal versus server-available asynchronous article retrievals.
zombieTasks=count -Z Allows to set how many zombie retries will be conducted at once. Default is 1. Greater values can speed up the retrieval of zombie articles, but at the cost of more open connections to news-servers. Value 0 will disable zombie retries.

[access] section: Access settings

Setting Old command-line option Description
otherComputers=1 -e Enable insecure mode and allow connections from other computers. By default, only connections from the machine running NewsPlex are possible.
nntpEnabled=0 -s Enables or disables NNTP access.
nntpPort=port -p Use port port for establishing the NNTP news-server. By default, NewsPlex uses the standard port 119. If this port is not available, NewsPlex tries to allocate a port starting from value 2000.
webEnabled=0 -w Enables or disables Web access.
Unlike in pre-4.0 versions, the Web interface is now active by default.
webPort=port -w Create a Web server on port port for controlling NewsPlex from a Web browser. The port value of 8000 is the default. If this port is not available, NewsPlex tries further values.
banner=some-text   Define a different welcome message for NewsPlex.
This welcome message will be taken into account if the bannerOkForVersion= setting has the value equal to the current version of NewsPlex or if the bannerOkAlways= setting is set to 1.
bannerOkForVersion=version-number   Define NewsPlex version for which the banner= setting is valid. If you want to keep a customized banner= setting after upgrading NewsPlex, you will need to adjust this setting or set the bannerOkAlways= setting to 1. Note that the default empty value of the bannerOkForVersion= setting does not match any NewsPlex version.
bannerOkAlways=1   A given banner= setting is valid only for the NewsPlex version defined by the bannerOkForVersion= setting, unless you set the bannerOkAlways= setting.
adminLogin=login-name
adminPass=password
-P These settings make NewsPlex require entering the specified login name and password before the NPsomething privileged administration commands are recognized. By default, all commands are available. The settings also protect the Web access.
userLogin=login-name
userPass=password
-U These settings make NewsPlex require entering the specified login name and password before any other commands can be entered. By default, the login and password are not required. They also protect the Web access.
webHtm=0
webUrl=0
telnetHtm=0
telnetUrl=0
newsHtm=0
newsUrl=0
  Do not create the web.htm, web.url, telnet.htm, telnet.url, news.htm and news.url files respectively.
maxNntp=16
maxWeb=16
  These settings allow to define how many incoming client connections of each type are allowed.

You can increase these values if you run into 503 Out of threads errors. However, this will not necessarily increase performance, as some news-readers get quickly impatient if NewsPlex does not realize a request immediately, typically accessing a news-group for the first time, close the connection and open another one to perform the same request. So increasing the allowed number of requests will only increase resource usage.

nntpQueueRequests=1
webQueueRequests=1
  These settings allow to define whether NewsPlex should wait till a "connection slot" becomes free in overload conditions or reject an incoming connection immediately.
allowedIP=IP-address-pattern
allowedHostName=hostname-pattern
  These settings allow to better control who is allowed to connect to NewsPlex outside of the local computer. They can be repeated, can contain wildcards and can also specify an exclusion if the ! exclamation mark is used at the beginning of the pattern.

If they are not present, every IP address and every host name are allowed accordindly.

Exclusion patterns must appear first, as NewsPlex scans the list of patterns from the beginning and stops scanning as soon as a match, positive or negative, is found.

If these settings are present, at least one pattern must be other than a rejecting one, otherwise nobody would be allowed to connect.

hostNameRequired=1   Allows to specify that only clients for which NewsPlex was able to find the hostname (by performing a reverse DNS search on the IP address) are allowed to access the server.

[clients] section: Client related settings

Setting Old command-line option Description
addPostedHeaderLeading=string
addPostedHeaderTrailing=string
addPostedBodyLeading=string
addPostedBodyTrailing=string
  These settings allow to insert header or body lines into posted articles, at either the first/leading or the last/trailing position, for example in order to identify postings.

The settings can be repeated, to insert several lines.

Strings inserted into the header should have a valid format, otherwise the news-server might refuse posted articles.

allowIHAVE=1   Whether to allow the IHAVE request. The selection of the news-server to which this request is forwarded is done based on the same criteria as for posting. No filtering of header lines is performed; the junkPostedHeader= settings is not used. All the other settings related to posting apply, notably the added lines.
renumber=level -n Sets the article renumbering mode if news-server unreachable. This is the equivalent of the NPRENUMBER command. By default renumbering is disabled (value 0).
showOnlyActiveGroups=1 -E Show only active news-groups to the news-readers. It is still possible to activate other news-groups. This option eg. allows to check whether your news-reader is subscribed to all active news-groups.
fakes=0 -F When a news-group is activated, NewsPlex creates two activation announcement articles inside, of which the first one is visible to the news-reader. When fakes is set to 0, the news-groups remain totally empty until some real articles are found for them on news-servers.
globalMsgIdRetrieval=0   Disallow article article retrieval by Message-ID (the ARTICLE, HEAD, STAT and BODY commands) if the current news-group was not yet set by the news-reader or if the Message-ID is not present in it. By default such retrievals are allowed, articles are considered as a variety of zombies and the same rules apply for deciding which news-servers will be used for downloading. If the article cannot be found, it is reported as inexisting rather than as temporarily unavailable.
junkPostedHeader=string1
junkPostedHeader=string2
...
  Define a string, which if found at the beginning of a header line in a posted article, will make NewsPlex skip that line when giving the article to the news-server.
Note that string is not a pattern and cannot contain wild-cards.
This setting can be repeated, to define additional headers. Note that defining even a single header thru this setting disables all the defaults hard-coded into NewsPlex.
logPostedBodies=0   Allows to select whether bodies of posted articles should be logged.
retrievedShow=0 -R s Show previously retrieved articles to news-readers, by marking their article descriptions with a /r prefix in the From: field. If an article has been scheduled for async retrieval, but the retrieval has not yet finished and has not been cancelled, this will be indicated with a /a prefix. If both situations occur, NewsPlex uses /ra as prefix.

Warning: If you use Netscape or Mozilla to read news, then if the From: line of an article contains just an address without name, that is somebody@host, when the field is marked, the news-reader will display just the /r itself, probably because adding the prefix violates the format of Internet email addresses.

provideXrefs=1   Enables the usage of NewsPlex with news-readers which require that article descriptions returned by the XOVER command include the Xref: field. By default, this field is not provided, because NewsPlex does not currently maintain article cross-reference information (it does however use this information when available on news-servers, except if this is disabled with server.useXrefs= settings or with the global explore.useXrefs= setting).

If enabled, the Xref: field will only contain information about the current news-group, so unless you are unable to use NewsPlex at all, there is no reason to change this setting.

reformatDates=1   Makes NewsPlex reformat the date and time information in article descriptions so that it follows a certain predefined standard, rather than being the original value retrieved from news-servers. This avoids errors in news-readers.

This setting increases the CPU time used, as dates are reformatted on the fly.

If NewsPlex is unable to parse the date and time information, it will return it as-is to the news-readers.

[connect] section: Connection control settings

Setting Old command-line option Description
enforceForbiddenIPs=0   Defines whether the connect.forbiddenIP= settings are effectively taken into account (globally, ie. for all news-servers).

There is also a per-news-server server.enforceForbiddenIPs= setting. Both settings must have non-zero values for IP forbidding to be active.

forbiddenIP=IP address pattern   Defines patterns for IP addresses which should not be connected to. For example, some news-servers which are no longer in service can have their name resolving to address 127.0.0.1, which is not a true address and always means "local computer". This spares the news-server 's owner any connection requests. All the IP addresses staring with 127 mean "local computer", so the correct pattern for detecting them is just 127.*

This setting can be repeated.

maxCategoryWait=3   This setting allows to define how much time NewsPlex should spend waiting for a news-server inside the current or lower categories before trying to use a higher category news-server.
maxTasks=16   This setting allows to define the maximum number of connection attempts that should be performed at the same time. The default value is 16. NewsPlex only opens one new connection to a given news-server at a given time, so this setting also limits the number of news-servers to which connection attempts are performed.
priorityDirect=-120
priorityAsync=0
priorityExplore=120
  These settings allow to define the relative priorities of direct article retrievals, asynchronous article retrievals and explorations with respect to news-server access. Lower values mean higher priority. By default direct retrievals are the most important and explorations the least. The absolute priority of a news-server request is the sum of the request time and of the priority, which prevents starvation of less important requests as long as the values of relative priorities are not too different from each other.

[general] section: General settings

Setting Old command-line option Description
exitIfNoInternet=1 -i Shutdown NewsPlex if the Internet connection is lost. This option works only if auto-updating is active (the explore.explore= setting is set).
shortFileNames=1 -t Shorten file names to 8.3 conventions.
This options makes NewsPlex create files following the MS-DOS naming convention, so that NewsPlex can run on file-systems which do not support long filenames, for example FAT on OS/2 or s5 on Unix. It is not fully implemented yet, since in the index2 directory filenames still reflect the news-group names.
storeDefaults=0   When saving the etc/newsplex.ini file to disk, only store those settings which do not have their default values.
If you did not change any settings, then activating this option will produce a etc/newsplex.ini file where all sections except [general] are empty, and the [general] section contains only one setting, this one (since it is not at its default value, which is to save everything).
verbose=1 -v Be more verbose and log additional information to the log files. This information notably includes performance data. Activating this setting will make NewsPlex show a few undocumented traces.
zombieDays=number -z Set the deleted article disappearance delay to number days. Value of 0 disables zombie creation. The default zombieDays is 7.
assumeInternetPresent=1 -I Assume that the Internet is always present. Use this option if NewsPlex is unable to correctly detect whether you are connected to the Internet at a given moment, and notably thinks that you are not while you really are.

Note that often NewsPlex 's inability to detect Internet presence comes from the fact that the /etc/hosts file (on Unix systems) or %SystemRoot%\system32\drivers\etc\hosts file (on Windows systems) define the IP address of your machine as 127.0.0.1. Another possible cause is that your computer is named localhost.

Using this option will clutter the logs more easily with uninteresting host unreachable information, and also will cause the renumbering (see the NPRENUMBER command) to be performed when you try to request an article while not being connected to the Internet.

hiddenLog=1   Enable the logging of the Message-IDs of hidden articles into the etc/hidden.sq3 file.
retrievedLog=0
retrievedMark=0
-R lm Configure the remembering of retrieved articles.
retrievedLog enables logging of the Message-IDs of retrieved articles into the etc/retrievd.sq3 file.
retrievedMark enables the marking of articles individually as read in the article database each time they have been successfully retrieved by some news-reader for the first time.

Note that if you do not enable retrievedMark but enable retrievedLog, article Message-IDs will be logged to the etc/retrievd.sq3 file at each retrieval, potentially several times. This is not a problem.

See also the clients.retrievedShow= setting.

See the section below for more details.

All these settings are enabled by default.

Note that in version 3.7 and before, the default processing was equivalent to just the clients.retrievedShow= setting, that is, no logging was done, but already marked articles were shown as such. Passing the -R command-line option was equivalent to enabling all three current settings.

mutexUnlockBeforeCondSignal=1   This setting allows to deal with buggy system libraries for thread management on Unix-type systems, typically Linux. If NewsPlex hangs on Ctrl-C instead of shutting down, then try this setting.
timeStampLogs=0   This setting allows to disable the default time-stamping of every line in the various log files that NewsPlex produces.

[groups] section: Group pre-selection

Setting Description
yes=pattern1
yes=pattern2
...
These settings define names of news-groups which should be retrieved from news-servers and offered to news-readers. The names of news-groups can contain * and ? wild-cards. Eg:
                yes=*midi*
                yes=*music*
        
It is possible to pass a single * on a line alone. This will select all news-groups on all news-servers and is the default value if there are no settings of this type.

Patterns defined by groups.yes= settings are passed to news-servers as-is (except when NewsPlex is configured to request the full news-group list and filter only locally). Therefore, it is not possible to use the slightly better filtering possibilities offered by NewsPlex, namely character sets or character ranges, described a propos the etc/filters.ini file.

Around 100 bytes of memory or swap are necessary to store information about a single news-group.

noByName=group-name1
noByName=group-name2
...
Indicates the names of unwanted news-groups which might get selected by groups.yes= settings. No wild-cards are allowed here. Eg:
                noByName=alt.music.boring
                noByName=alt.midi.lame
        
Use this setting only if you want to forbid access to specific news-groups.

Before the 4.4 release, this setting was named just groups.no=.

noByPattern=group-name-pattern1
noByPattern=group-name-pattern2
...
Indicates the names of unwanted news-groups which might get selected by groups.yes= settings. Full wild-cards are allowed here, as for the etc/filters.ini file. Eg:
                noByPattern=*.alcohol*
                noByPattern=*.cigarettes*
        
Use this setting if you want to forbid access to broader news-group categories.

It may be difficult to exclude just what seems necessary when operating by patterns without accidentally excluding other news-groups too.

[explore] section: Server exploration setting

Setting Old command-line option Description
alwaysFilter=1   Force etc/filters.ini application on every news-server, even when this is not individually requested by server.filterArticles= settings in etc/servers.ini.
alwaysLIST=1 -l Always request the full news-group list from news-servers when exploring them, and filter interesting news-groups locally. The server.listPreferred= setting in etc/servers.ini is the per-news-server version.
minimal=1 -m Perform minimal exploration of news-servers and terminate. This command causes NewsPlex to run in a special Minimal mode, and only rate the news-servers listed in the etc/servers.ini file.

NewsPlex will try to connect to each of them, and retrieve the latest available article's head in up to 20 news-groups from the list of news-groups matching the groups.yes= settings. If no article could be retrieved, the entire session will be logged into logs/unusable. Otherwise, the session log will stay in explore/server-disk-name. Note that NewsPlex will stop sampling the news-groups on a news-server if the connection with it has been broken temporarily.

No index2 or newsrc3 directories are used or created.

explore=0 -u Whether to explore the news-servers automatically. When exploring is disabled, it is still possible to explore a specific news-server by using the NPEXPLORESERVER command.
noXGTITLE=1 -x Do not use the XGTITLE NNTP protocol request for getting the news-groups list.
NewsPlex normally does not use XGTITLE for getting the list of news-groups matching a pattern. However, if the news-server does not support retrieving names of news-groups using wild-cards, then XGTITLE will be used. Since this command is often broken and does not return all the possible news-groups, this setting allows to avoid using it. NewsPlex will instead get the full news-groups list and filter locally.
daysTooOld=number -y Limit the age of articles (article descriptions) added to the article database during the news-server exploration to number days. By default, the age is not limited and all articles are accepted. This setting can be superseded for each news-server individually using server.daysTooOld= settings. See also the NPDELETEOLD command.
deferredOnStartup=1 -D If this option is specified, NewsPlex will look at the dates of the newsrc3 files and defer the exploration of news-servers for which the date of their file is recent. If you restart NewsPlex after a short interruption, it is better to enable this setting.
numbersCollapseMinDistance=5
numbersCollapseMaxRanges=32
  These options allow to specified how NewsPlex should try to reduce the number of requests about new articles issued to news-servers. Article numbers can be from 0 to over 2 billions, so in the worst case, NewsPlex could issue up to 2/3 billion requests to a news-server, which would take an eternity.

The numbersCollapseMinDistance= setting allows to collapse number ranges less than the specified value apart. The minimal distance is 2 (a distance of 1 would mean two ranges are contiguous, and NewsPlex merges them automatically then).

The numbersCollapseMaxRanges= setting specifies how many ranges there can be at most. The minimum value is 1.

quitAfter=1   Close news-server connections immediately after finishing explorations. You can specify this option when NewsPlex is only occasionally accessed by news-readers, in order to decrease news-server usage.
skipEmptyGroups=1 -S Skip news-groups which appear as empty in news-server 's news-group list when exploring. By default, NewsPlex tries to explore news-groups which appear as empty by other means, in order to find all the articles they might contain in spite of possible incoherences in the information provided by the news-server, but this is not worth it most of the time.
simultaneousMinimal=count
simultaneousNormal=count
-T Explore count news-servers at once instead of default. By default, up to 8 news-servers are explored at once in normal mode, and 16 in minimal mode. This is suitable for dial-up modem connections. Increasing this number can speed up things up if you have a fast Internet connection. Otherwise, it could make things worse because of Internet connection contention and resulting timeouts. Also, the more news-servers are explored at once, the more CPU and memory are used.
useXrefs=0   This setting complements the per-news-server server.useXrefs= setting in etc/servers.ini, and allows to globally disable the usage of article cross-reference information received from news-servers, rather than having to disable it individually for each news-server. In some setups, involving probably very large news-groups, managing cross-references caused excessive memory usage and resulted in thrashing.
xrefLogGroupNotActive=1
xrefLogHadArticle=1
xrefLogAddedArticle=1
  Introduced in version 4.3, these 3 settings allow to re-enable frequent log traces which were always produced in version 4.2 and before:
  • Not adding x-ref for news-group: Group not active.
  • Had article (server article-number, local article-number) in news-group already.
  • Added article to news-group (current article-number, other article-number, server current article-number, server other article-number).

[startup] section: Startup settings

Setting Old command-line option Description
runInBackground=1 -b Run in background.

By default, NewsPlex runs in foreground and blocks the window from which it has been started. The runInBackground= setting makes NewsPlex put itself into the background. NewsPlex will fork and the initial process will exit, with code 0, just before the first non-main thread is created.

hideIfBackground=0   Only used and useful on Windows, this setting changes the way in which NewsPlex switches to background mode. It makes NewsPlex hide its own console window instead of destroying it. This allows NewsPlex to still get system signals, notably about system shutdowns, and to terminate gracefully.
filterAll=1 -f Delete unwanted articles. If this setting is enabled, the etc/filters.ini file is read on startup and all articles which match the patterns inside are deleted from the article database.
See also the server.filterArticles= setting and the explore.alwaysFilter= setting.
lowerPriority=1 -ol
-oi
Lower the priority of the NewsPlex process to the Idle level. This frees the CPU, but the download speeds might suffer. NewsPlex could become CPU-starved if you already have programs running in the background permanently and at a low priority, like Seti@Home, or if you run DOS programs which take all CPU. On Windows NT/2000/XP, you can also adjust the priority of NewsPlex from the Task Manager.
ignoreAnother=1 -G Ignore another news-server already running on the NNTP port. It allows to start NewsPlex when certain funny proxies or firewalls are running on the computer.
applyHidden=1 -M This option makes NewsPlex read the etc/hidden.sq3 file on startup and mark as hidden all the article descriptions whose Message-IDs are listed in this file. This can also be performed using the NPAPPLYHIDDEN command at any time.
applyRetrievd=1 -M This option makes NewsPlex read the etc/retrievd.sq3 file on startup and mark as retrieved (see section below) all the article descriptions whose Message-IDs are listed in this file. This can also be performed using the NPAPPLYRETRIEVD command at any time.
compactAll=1 -O Compact and rewrite all index2 files at startup. This option allows to bring the databases to the smallest size. It however takes a certain time to execute.

[shutdown] section: Shutdown settings

Setting Old command-line option Description
waitEnter=0 -N Whether to wait for a final Enter key press before exiting.
updateNewsplexIni=0   Whether to save the current settings back into the etc/newsplex.ini file on exit.
Given that currently it is not yet possible to edit most of the etc/newsplex.ini settings from the Web interface, it appeared convenient to allow disabling their automatic saving. This way you can edit the file while NewsPlex runs and have the modifications taken into account the next time NewsPlex is started or restarted.
deleteActual=1
deleteJournal=1
deleteLogsClients=1
deleteLogsCompact=1
deleteLogsIntruder=1
deleteLogsResults=1
deleteLogsSummary=1
deleteLogsUnusable=1
deleteLogsWeb=1
  Delete the corresponding file(s) and the associated .bak file(s) if they exist.
deleteConnect=1
deleteExplore=1
deleteLogs=1
  Delete the corresponding directory.

Zombie and Phoenix articles

Zombies are articles no more available from any news-server, but still maintained in the article database for a few days, by default 7. Zombie management allows to avoid allocating new numbers to such articles if they become available again, through other news-servers. It also allows preserving the retrieved status during this lingering time and thus makes using the startup.applyRetrievd= setting and the startup.applyHidden= setting in etc/newsplex.ini (apply etc/retrievd.sq3 and etc/hidden.sq3 at startup) less necessary after adding a new news-servers to the etc/servers.ini file and exploring it. Articles which resurface are called phoenix articles.

If a zombie article is requested, NewsPlex behaves like for requests for articles residing on unreachable news-servers. It returns the same error code, but with a specific message (500 Article is a zombie) by default. If renumbering is activated, NewsPlex pretends that the article has been deleted (which is actually true here) and renumbers it, so that if the article becomes available again, it is perceived as a new article by the news-reader.

It is also possible to specify the attemptMsgId= setting for specific news-servers, which will make NewsPlex attempt to always retrieve articles from them, even if they never said they had the article or even the news-group.

Files and directories

When operating, NewsPlex produces a series of files and directories in the work directory.

Filename Description
actual The actual directory stores the per-news-server actually offered news-group lists. Each list is an SQLite3 database and has the same columns as the etc/groups.sq3 file. It uses the rangeLow, rangeHigh and score fields which etc/groups.sq3 does not use; the range... fields define the range of available article numbers for this news-group, while the score decides about the news-group exploration order on the news-server and is computed by NewsPlex. The list is erased at the beginning of every exploration. This is not a permanent list of news-groups offered by the news-server: at times it may only contain a single news-group, the one being activated.

The actual directory and content have been introduced in version 4.5. Before this release, information was stored in memory.

The content and the directory itself can be optionally automatically erased when NewsPlex terminates if shutdown.deleteActual= setting is set to 1.

async The async directory is used when asynchronous article retrieval is enabled. It stores both control files and the articles themselves.
async/xxxxxxxx.bad The async/xxxxxxxx.bad files, where x are hexadecimal digits, are articles which could not be retrieved completely because of temporary errors. These files always have a size greater than zero, otherwise they are not kept. During the next article retrieval attempt, they will be deleted and replaced with async/xxxxxxxx.ok files.
async/xxxxxxxx.del The async/xxxxxxxx.del files, where x are hexadecimal digits, are produced instead of async/xxxxxxxx.ok files if an article could not be retrieved, for example because it has been deleted from all news-servers. async/xxxxxxxx.del files contain only an error message from NewsPlex, formatted as a news article. These files are deleted just like async/xxxxxxxx.ok files after a news-reader has requested them. You can delete them manually at any time if you want.
async/xxxxxxxx.log The async/xxxxxxxx.log files, where x are hexadecimal digits, are logs of asynchronous article retrievals. They exist only while the article retrieval is in progress and when it completes, they are appended to the logs/summary file.
async/xxxxxxxx.ok The async/xxxxxxxx.ok files, where x are hexadecimal digits, are asynchronously retrieved articles. They are also visible in the async news-group generated by NewsPlex locally. They are deleted 300 seconds after having been successfully retrieved for the first time by a news-reader. If they are requested again in the meantime, the deletion is delayed accordingly. You can also delete them manually at any time if you want.

This allows to retrieve articles several times, which is useful when news-readers do not cache them, and also allows to better deal with errors (eg. disk space exhaustions) occurring when transferring multi-part postings. news-readers might discard parts already retrieved if an error occurs for the current part, even if for NewsPlex they were retrieved correctly and hence scheduled for deletion.
If an article could not be retrieved, for example because it has been deleted from all news-servers, then a async/xxxxxxxx.del file is produced instead.

Note that any async/xxxxxxxx.ok file, where x are lowercase hexadecimal digits and where the first digit is not a zero, copied into the async directory, will be visible in the async news-group and can be retrieved from a news-reader. After the first successful retrieval, it will be scheduled for deletion as described above.

async/xxxxxxxx.tmp The async/xxxxxxxx.tmp files, where x are hexadecimal digits, are asynchronously retrieved articles in progress. After the article retrieval is finished, articles are renamed to async/xxxxxxxx.ok and visible in the async news-group generated by NewsPlex.
connect The connect directory stores logs of connection activities performed on news-servers. Since NewsPlex serializes connection attempts, only one file needs to be used for a given news-server. Log files are named after news-servers; see the description for the newsrc3 directory for format details. Once files grow over a certain size, they are renamed into .bak and a new file is started. The previous .bak file is deleted.
etc The etc directory hosts the various output files that NewsPlex produces and sometimes reuses.
etc/filters.ini This file is used for article filtering, with the server.filterArticles= setting, with the explore.alwaysFilter= setting, with the NPFILTER command and with the startup.filterAll= setting in etc/newsplex.ini.

This file contains only [filter] sections, each one defining a single filter.

A sample etc/filters.ini is automatically created at NewsPlex startup if it does not yet exist.

The following settings can be used inside sections. If a setting is not defined, the corresponding field in article descriptions will not be examined.
Empty filters, for example resulting from having two consecutive [filter] lines, would cover all articles, and are hence ignored.
Wild-cards (*, ? and character sets and intervals, eg. [0-9a-z] or [!;,]) can be used in patterns. Note that patterns must cover the entire field, so they will often start and end with a star (*).

Setting Description
from=pattern Pattern for the From: field of articles. Can be repeated.
msgId=pattern Pattern for the Message-ID field of articles. Can be repeated.
subject=pattern Pattern for the Subject: field of articles. Can be repeated.
groups=pattern Which news-groups the pattern should be applied to. Can be repeated. NewsPlex uses this setting to decide if the filter should be applied to a given news-group.
comment=string Comment for the pattern, just for your information. Can be repeated.
disabled=1 Disables the pattern.
hide=1 The pattern causes the hiding of the article. The article remains in the article database, but NewsPlex will pretend it has been deleted.
linesMin=value
linesMax=value
Defines the minimum and maximum number of lines in the articles to be filtered out.
bytesMin=value
bytesMax=value
Defines the minimum and maximum number of bytes in the articles to be filtered out.
daysTooOld=value Filters all articles whose Date: is older than value days.
xrefsMin=value
xrefsMax=value
Filter articles cross-posted to between xrefsMin and xrefsMax additional news-groups. For example, an article posted to 3 news-groups is considered as cross-posted to 2 additional news-groups, so a xrefsMin=2 setting would match it, but not xrefsMin=3.
xrefsGroups=pattern1
xrefsGroups=pattern2
...
Filter articles cross-posted to news-groups matching the patterns. If the pattern starts with an exclamation mark (!) then consider matching news-groups as acceptable. Exclamation mark patterns must appear first.

Example file:

        [filter]
        comment=This is a comment
        from=annoying@annoying.com
        msgId=<*@annoying.com>
        msgId=<*@unwanted.com>
         
        [filter]
        comment=This filter would cover everything and will be ignored
         
        [filter]
        from=lamer*@lamers.com
        msgId=<lamers*@*lamers.com>
         
        [filter]
        comment=Filter out old reposts
        subject=REPOST:*
        daysTooOld=40
         
        [filter]
        comment=Filter out small zip files in alt.* groups. No, after all
        subject=*.zip*
        linesMax=10
        groups=alt.*
        disabled=1
        
etc/groups.sq3 The etc/groups.sq3 file contains the full SQLite3 database of news-groups managed by NewsPlex. Each row records information about a single news-group, and contains:
Setting Description
addTimeSecs the time, expressed in seconds since 1/1/1970, at which the news-group has been added to the file
groupName the name of the news-group
hash a hash of the name of the news-group
description a description of the news-group, as provided by the XGTITLE command. This description is presently not managed so this field remains empty
articlesGot number of articles requested
kiloBytesGot total size in kilobytes of these articles
lastGotSecs date of last article retrieval expressed in seconds since 1/1/1970
lastGroupSecs date of last news-group selection (not necessarily activation), expressed in seconds since 1/1/1970
lastOverviewSecs date of last XOVER, LISTGROUP, XHDR or XPAT command (implies activation), expressed in seconds since 1/1/1970
flags A bitfield of binary status flags, where bit 0 means Active, bit 1 means Unwanted, bit 2 means Postable, bit 3 means Moderated. Unwanted groups are removed from etc/groups.sq3 at every NewsPlex startup and replaced with what the etc/newsplex.ini file currently specifies. Active flags are removed and replaced with the current index2 content.
rangeLow Not used, reserved for actual databases
rangeHigh Not used, reserved for actual databases
score Not used, reserved for actual databases
serverId The server-number of the news-server on which the news-group was noticed first

The content of this file is accessible in various ways thru the Web interface.

When exploring a news-server, NewsPlex first asks for the most popular news-groups, but it also takes into account the last exploration date for each news-group. This avoids starvations with unpopular news-groups if a news-server often becomes unavailable before an exploration completes.

Note that this file can contain historical groups, which do not exist on any news-server anymore, even no more allowed by groups.yes= settings in etc/newsplex.ini; news-groups which do not match the current groups.yes= settings are ignored when NewsPlex reads this file.

You can (currently) delete this file when NewsPlex is not running. NewsPlex will reconstruct the file when it is run again. This only introduces a minor penalty that names of all news-groups will be returned if later a news-reader asks for just new news-groups.

etc/hidden.sq3 If the general.hiddenLog= setting in etc/newsplex.ini is set, NewsPlex stores in the etc/hidden.sq3 SQLite3 database the Message-ID fields of all the articles which have been hidden as the result of the application of filters. This file is also used when the startup.applyHidden= setting is specified in etc/newsplex.ini (see section below).

The database has three columns: msgId, hash of the Message-ID and addTimeSecs. Before release 4.5, it was a plain text file.

etc/newsplex.ini This is the main configuration file for NewsPlex. It is documented in detail in a separate chapter.
etc/retrievd.sq3 If the general.retrievedLog= setting in etc/newsplex.ini is set, NewsPlex stores in the etc/retrievd.sq3 SQLite3 database the Message-ID fields of all the articles which have been successfully retrieved by news-readers. This file is also used when the startup.applyRetrievd= setting is specified in etc/newsplex.ini (see section below).

This database has exactly the same format as the etc/hidden.sq3 database.

etc/async.sq3 The etc/async.sq3 file contains the SQLite3 database of articles which are being retrieved asynchronously. It is deleted after all articles have been processed.

Each row in the etc/async.sq3 database has the following columns:

  • article handle
  • news-group name
  • article number
  • article Message-ID
  • number of bytes in article
  • article Subject:
etc/servdyna.ini This is the news-server status and statistics store for NewsPlex. It is currently not documented.
etc/servers.ini This is the news-server list for NewsPlex. It is documented in detail in a separate chapter.
explore The explore directory stores the log files resulting from the exploration of news-servers. Log files are named after news-servers; see the description for the newsrc3 directory for format details.

Each news-server exploration has the same scenario, which is logged into the file:

  1. NewsPlex asks for news-groups matching groups.yes= settings. This is done if the previous request is more than 24 hours old or if the etc/newsplex.ini file has been modified since (if shutdown.updateNewsplexIni is not set), otherwise NewsPlex just requests new news-group names.

  2. NewsPlex produces a resulting list of interesting news-groups. The first column is the number of articles, the 2nd column indicates whether the news-group is active, the 3rd column is news-group name, followed by highest and lowest available article numbers and by the posting status of the news-group (y=yes, n=no, m=moderated). This listing is only produced if the groups.yes= settings does not request all news-groups or if the news-server does not have many news-groups.

  3. If any of the news-groups on the news-server are active, NewsPlex produces a separate list for them.

  4. NewsPlex displays which news-groups have vanished compared to the previous run.

    Note that because of the way in which news-group activation is implemented today, NewsPlex can sometimes indicate at the next normal exploration of the news-server that certain groups have vanished from it, while in fact the news-server never had them. This is due to the fact sometimes it is not possible to decide about the existence of a news-group on a specific news-server at the activation time.

  5. NewsPlex explores each news-group, using the newsrc3 and index2 files to avoid retrieving the same article descriptions twice. It also leverages the statistics from the etc/groups.sq3 file to explore the most popular news-groups first. Groups which have never been visited are explored in a round-robin order, thanks to the time-stamp info from the newsrc3 file. At the end, NewsPlex displays how many connections were performed, the number of bytes sent and received, and when the next exploration will be done.
This directory is preserved when NewsPlex terminates. The files inside can be deleted at any time, except when locked by NewsPlex because used. If a log file grows over 102400L bytes, a new file is opened when the next exploration starts, and the existing file name is added the .bak extension. The previous .bak file is deleted.
index2 The index2 directory contains article descriptions for news-groups. There is one file for each news-group offered by NewsPlex. The files are in SQLite3 database format. Each file has one row per article. It describes the article and has the following fields:
  • article number
  • subject
  • originator information
  • date as string
  • Message-ID, article unique message identifier
  • a hash of the Message-ID
  • article threading references
  • number of bytes in article
  • number of lines in article
  • news-group cross-referencing information
  • list of news-servers having the article and the corresponding article numbers
  • flags

    BitMeaning
    0 Article has already been retrieved by some news-reader.
    1 Article has been renumbered at level 2. NewsPlex will alter the Message-ID of the article when a news-reader requests it. Note that if an article is renumbered at level 1, ie. without changing the Message-ID, no special flag is set for it.
    2 Article has been scheduled for asynchronous article retrieval.
    3 Article has been hidden. NewsPlex will pretend it is not there.

  • date as number of seconds since 1/1/1970
Do not put foreign files into this directory. They would be taken for news-group files, and NewsPlex could decide to "fix" or purely delete them.
journal The journal file logs certain events and conditions as NewsPlex runs, like incoming connections from news-readers. This file is renamed to journal.bak each time NewsPlex is started and this file is over 204800L bytes long. The previous journal.bak, if any, is deleted.

When NewsPlex terminates, it prints into the journal file some summary information about the usage of news-servers during the session, similar to the results of the NPSERVERS command.

list The list directory temporarily stores the full news-group listings from news-servers which cannot return news-groups matching patterns. It is automatically destroyed when NewsPlex exits.
logs The logs directory hosts the various output files that NewsPlex produces but does not reuse. Its content can be deleted at any time.
logs/cli-host-port The logs/cli-host-port files log commands issued by your news-reader and the responses it got. They notably contain the full content of posted articles.

host is either the name of the machine from where the news-reader connected, or the IP address if the name could not be found, while port is the IP port number the news-reader is using. Once a news-reader has disconnected, the contents of its logs/cli-host-port file are appended to logs/clients and the logs/cli-host-port file is deleted.

logs/clients The logs/clients file logs closed sessions from news-readers. It can be deleted at any time. If it grows over 100000L bytes, a new file is started, and the existing file name is added the .bak extension. The previous .bak file is deleted.
logs/compact The logs/compact file logs database compacting activity. A compaction is scheduled to start 10 minutes after NewsPlex startup, and is performed every 300 minutes later. The logs/compact file can be deleted at any time. If it grows over 10000 bytes, a new file is opened when the next compaction starts, and the existing file name is added the .bak extension. The previous .bak file is deleted.
logs/intruder The logs/intruder file logs rejected incoming connections. For each connection, the date, the IP address, the IP port and the host-name are stored. The file can be deleted at any time, but you better check from time to time who tries to use your NewsPlex without authorization.
logs/results The logs/results file indicates the exploration results for news-servers. Each line has this format:

                server-url [flags] # result (comment)
        

This file is kept when NewsPlex terminates. It can be deleted at any time.
If you have defined proxies for accessing the news-servers, they are copied into this file when it is created.

logs/summary The logs/summary file stores the log of asynchronous article retrievals. Both successful and unsuccessful attempts are logged there after they have completed. For a given article, there can be several failed logs before the successful one. Or the last log can be a permanent failure, eg. article deletion from the article database.

If it grows over 500000L bytes, a new file is started, and the existing file name is added the .bak extension. The previous .bak file is deleted.

logs/unusable The logs/unusable file is only created in Minimal mode (explore.minimal in etc/newsplex.ini). It contains the logs of news-server explorations for all news-servers which did not have any interesting news-groups or which could not be contacted at all. It can be deleted at any time.
logs/web-host-port The logs/web-host-port files are similar to logs/cli-host-port files, except they are used for Web browser sessions. Once a Web browser has disconnected, the contents of its logs/web-host-port file are appended to logs/web and the logs/web-host-port file is deleted.
logs/web The logs/web file has the same purpose as the logs/clients file, except it collects the logs of past Web sessions.
newsrc3 The newsrc3 directory contains one SQLite3 database per news-server used. It logs which active news-groups have been explored on the news-server and which article descriptions have been retrieved from them. The file does not store information about non-active news-groups on the news-server.

The names of files are normally equal to news-server names, but if there is a login or a non-standard port specified for a news-server, the server-disk-name will include them as well, using the [login@]server-name[_port] syntax, so that it is possible to eg. use several news-servers located on the same host. Note that invalid characters in the resulting filename are replaced with underscores.

The directory names have been changed so that your article databases are not corrupted if by accident you run a version of NewsPlex older than 4.5 in the directory containing 4.5 and later style article database files. It will simply create and start filling old-style directories, which you can safely delete after stopping the program. Then you can start the correct version of NewsPlex.

Every row in a newsrc3 database contains the name of a news-group, the time of its last exploration in seconds since 1/1/1970, flags (currently not used) and the ranges of article numbers, first...last, for which article descriptions have already been retrieved. If the news-group is empty on the news-server, there will be no ranges for it. Ranges are stored in binary form for efficiency, however they are always in big endian (or so-called network) order so the file remains portable between the various processor architectures on which NewsPlex runs.

You can delete a file corresponding to a news-server to force NewsPlex to retrieve the full article list for each news-group at the next exploration of the news-server. This will however almost certainly create dangling references in the article database. Such dangling references can be removed with the NPCHECKGROUPS command, preferably after the news-server has been re-explored.

news.htm The news.htm file contains a Web redirection to NewsPlex 's news-server. By opening it with a Web browser, you should get your news-reader started and connecting to NewsPlex. It is created at startup and deleted at shutdown. JavaScript must be enabled in the Web browser.
Note that the login and password are not currently passed in the news.htm link.
news.url The news.url file contains an Internet Explorer link to NewsPlex 's news-server. By opening it with Internet Explorer, you should get a news-reader session with NewsPlex. It is created at startup and deleted at shutdown.
Note: some news-readers, like Outlook Express, do not recognize the port specification in the URL, so if you run NewsPlex on a non-default port, you will need some tweaking to get them to connect.
Note also that the login and password are not currently passed in the news.url link.
panic The panic file is created if NewsPlex detects an non-recoverable internal error. Once a short message has been logged into this file, NewsPlex exits. A core file is produced.
telnet.htm The telnet.htm file contains a Web redirection to NewsPlex 's telnet port. By opening it with a Web browser, you should get a telnet session with NewsPlex. It is created at startup and deleted at shutdown. JavaScript must be enabled in the Web browser.
telnet.url The telnet.url file contains an Internet Explorer link to NewsPlex 's telnet port. By opening it with Internet Explorer, you should get a telnet session with NewsPlex. It is created at startup and deleted at shutdown.
web.htm The web.htm file contains a Web redirection to NewsPlex 's Web page. By opening it with a Web browser, you should get to NewsPlex 's web page. It is created at startup and deleted at shutdown. JavaScript must be enabled in the Web browser.
web.url The web.url file contains an Internet Explorer link to NewsPlex 's Web page. By opening it with Internet Explorer, you should get to NewsPlex 's web page. It is created at startup and deleted at shutdown.
xhdr The xhdr directory temporarily stores the results of individual XHDR requests issued to news-servers for which the emulateXoverUsingXhdr= setting has been set. Hosted files are named using the server-disk-name_xhdr-request-name pattern (see the description of newsrc3 directory for explanations about server-disk-names). They are deleted when no more needed. The directory is automatically destroyed when NewsPlex exits.

Commands

NewsPlex supports most of the standard NNTP commands for servicing news-readers: ARTICLE, AUTHINFO USER, AUTHINFO PASS, BODY, DATE, GROUP, HEAD, HELP, IHAVE, LAST, LIST, LIST ACTIVE [wildmat], LIST NEWSGROUPS (always empty), LIST OVERVIEW.FMT, LISTGROUP, MODE READER, NEWGROUPS, NEXT, POST, QUIT, SLAVE (does nothing actually), STAT, XGTITLE [wildmat] (all groups have? as description), XHDR, XOVER and XPAT.

Although the STAT command could be executed entirely locally, it actually goes to news-servers in order to allow validating the availability of an article.

The XHDR command has been extended.

NewsPlex also adds a few commands of its own, which are not intended for usage by news-readers but rather by an operator. These commands can be entered after performing telnet localhost 119 on your computer. They can also be performed using the provided NpNNTP utility. The HELP command does not display them if the user is unprivileged.

The Web browser interface, active by default since version 4.0, allows to perform all administrative commands available by telnet, plus a few of its own. The pages are not currently documented. If the default Web port is used, connect your Web browser to URL http://localhost:8000 or load/start either the web.htm or the web.url file.

Command Web Description
NPACCESSED Yes Display which news-groups are currently being accessed by news-readers or are being updated. The following information is displayed for each news-group:
  • Number of users
  • Number of articles
  • Whether it has been modified since having been read from disk
  • The number of threads waiting to access the news-group
  • Flags:
    FlagMeaning
    BBusy, still loading
    TTransaction running
    EError, not accessible
    LLoaded ok
    MModified versus disk
  • Name
NPACTIVE Yes Like LIST, but displays only active news-groups.
NPAPPLYHIDDEN Yes Read the etc/hidden.sq3 file and mark as hidden in all news-groups all articles whose Message-IDs are listed inside. Equivalent to the startup.applyHidden= setting in etc/newsplex.ini.
NPAPPLYRETRIEVD Yes Read the etc/retrievd.sq3 file and mark as read in all news-groups all articles whose Message-IDs are listed inside. Equivalent to the startup.applyRetrievd= setting in etc/newsplex.ini.
NPASYNC [min-lines] Yes Enable asynchronous article retrieval for articles longer than min-lines lines and which seem to contain binaries (NewsPlex looks at article subjects to decide about that, using the async.binaryFilter= settings). If min-lines is preceded with a minus, all articles longer than min-lines are retrieved asynchronously. Passing min-lines of 0 disables asynchronous article retrieval, but does not stop article retrievals already scheduled. The NPASYNC command also displays the list of articles which are being retrieved asynchronously, followed by a line giving their count and total number of bytes.
NPCANCEL article-number [article-number...] Yes Cancel the retrieval of one or more articles scheduled for asynchronous article retrieval. Each article-number can be provided either in decimal form or in hexadecimal form (with a 0x prefix). It is not necessary to select the async news-group first.
NPCHECKGROUPS mode Yes Check the article database for coherency with the newsrc3 files and optionally remove dangling news-server references. Such references can appear if NewsPlex is brutally killed before having saved modifications done to an index2 file, while corresponding modifications done to the newsrc3 file have already been updated (the opposite situation simply makes NewsPlex retrieve some article descriptions again, as regets). mode specifies the operation mode:

0 - check only, silent mode
1 - check only, verbose mode
2 - fix errors, silent mode
3 - fix errors, verbose mode

If a news-server is being explored when this command is entered, no checking will be performed for it.

Starting with version 3.0, NPCHECKGROUPS also deletes index2 files corresponding to unwanted news-groups.

NPCLIENTS Yes Display the list of currently connected client news-readers and Web browsers. For each client, the following information is displayed:
  • Connection type, N for news-readers and W for Web browsers
  • Socket number (a unique identifier for the connection)
  • The IP address of the client
  • The IP port of the client
  • The host-name of the client
  • The time the client came in
  • Whether the current group's index is loaded into memory.
  • The current group for the client.
  • The current article number in the group, or -1 if there is none.
  • The calling connection is marked with an asterisk in the last column.
NPCLOSE server-number Yes Close all idle connections to a given news-server. If no server-number is provided or if it is 0, all idle news-server connections are closed.
NPCONNECTED Yes Display the list of open news-server connections along with the state and purpose. This can be either for exploring or for retrieving an article on news-reader request. Connections are maintained a few minutes even when idle, so as to minimize the time necessary to re-use a news-server. For each connection, the following information is displayed:
  • ID of the news-server
  • Connection status:

    Letter Meaning
      Idle
    A Direct asynchronous article retrieval
    C Connecting
    D Dead
    E Explore
    K Being kept-alive
    R Direct article retrieval
    T Terminating
    V Server-available asynchronous article retrieval

  • For how long the connection has been in this state
  • How many times this connection has been used, including the current one (if Used)
  • Number of bytes sent to news-server
  • Number of bytes received from news-server
  • Name of the news-server
  • Current group on news-server, if any
  • Last error string
NPDATASETS Yes This is an obsolete command and currently does nothing else than displaying a 200 status line and a single-dot line.
NPDEACTIVATE Yes Deactivate the current news-group. The index2 file will be deleted, and NewsPlex will consider that the group has never been activated.
Note: Because, for now, the newsrc3 files are cleaned off non-active news-groups at next exploration only, it is better to shutdown NewsPlex before re-activating a news-group, or the news-group will not be re-populated with news-server references correctly.
NPDELETEOLD days Yes Delete article descriptions older than days days in all news-groups. Articles which do not have a recognizable Date will be kept. Note that NewsPlex does recognize some non-English formats and can parse post-1999 dates where the year is noted with one or two digits only, eg. 0, 00, 01, etc.

No zombies are created; article descriptions are deleted directly.

Note that article descriptions are normally automatically removed from the database when corresponding articles vanish from news-servers (after the expiration of the zombie period). The NPDELETEOLD command allows to trim the article database in case news-servers forget to expire some of their old articles. See also the explore.daysTooOld= setting in etc/newsplex.ini and the server.daysTooOld= setting in etc/servers.ini.

NPDELETESERVER server-number Yes This command currently deletes article database news-server references to the specified news-server. It does not make NewsPlex stop attempting to use the news-server.

If a news-server becomes unusable, as the explore/server-disk-name file indicates, you can delete it from NewsPlex using NPDELETESERVER server-number. NPGLOBALSTATS will then not show any articles for it anymore. Then you can delete it from the etc/servers.ini file (or set the server.disabled= setting for it) and restart NewsPlex.

This command even allows to delete a news-server which is no more present in the etc/servers.ini file. For example, if you removed the entry, but did not perform NPDELETESERVER first.

NPEXPLORESERVER server-number Yes Explore a news-server immediately rather than waiting till its time comes. This command is also useful if NewsPlex has been started with automatic exploration disabled (the explore.explore= setting set to 0). Note that the news-server will be only explored once.
NPFILTER Yes Apply filters from etc/filters.ini to current news-group. After selecting a news-group with the GROUP name command, you can enter NPFILTER to apply the current set of filters from the etc/filters.ini file to this group.

No zombies are created; article descriptions are deleted directly.

See also the startup.filterAll= setting in etc/newsplex.ini and the server.filterArticles= setting in etc/servers.ini.

NPFORCETASK handle [handle...] Yes Force the immediate execution of one or more tasks, which otherwise would be executed later. One can force an asynchronous article retrieval this way.
NPGLOBALSTATS Yes Display provider stats for all news-groups.

NewsPlex will display for each news-server how many articles it has and how many of them are unique. If a given news-server does not appear in the list, NewsPlex has no articles from it.

NPGROUPSTATS Yes Display provider stats for the current news-group. After selecting a news-group with the GROUP name command, you can enter NPGROUPSTATS to see the news-servers which contain articles for this news-group.
NPMARKRETRIEVED article-number - Mark article article-number in the current news-group as retrieved (see section below).
NPPOSTSERVER [server-number] Yes Define a news-server as the default posting news-server. This command can be used to dynamically change the news-server set by the etc/servers.ini file. This is a global setting, valid for the current and all other connections. Without argument, this command displays the current default posting news-server. With argument 0, it disables posting.
NPREFRESH news-group-name Yes Start exploring the indicated specific news-group on all news-servers. Use this command if you feel you need to refresh NewsPlex 's idea about it. Note that this command does not activate the news-group implicitly.
NPRENUMBER level Yes This command helps dealing with unavailable news-servers (asynchronous article retrieval is another way).

If no news-server having an article is reachable, by default NewsPlex will send to the news-reader

        500 No server having article is reachable 
Some news-readers however do not like this message and do not request further articles, or even disconnect.

If NPRENUMBER is activated, but is not at level 3, NewsPlex will instead send

        423 no such article number in this news-group 
which makes the news-reader think the article has simply been deleted. Most news-readers will continue retrieving other articles correctly.

NewsPlex will however create a new reference for the article which will be seen by the news-readers the next time they asks for new articles. There are 2 possible ways for creating this new reference:

  1. Moving the article under a new number (NPRENUMBER 1).
    This is clean, but some news-readers check for cross-posted articles using Message-IDs and will ignore articles which have the same Message-ID as an old article, even if this old article has been signaled as deleted previously.

  2. Also changing the Message-ID (NPRENUMBER 2).
    This allows to deal with the previous issue. NewsPlex also alters the Message-ID to make the article look new. However, the article will not appear in the correct place in the thread to which it belongs: it will lose its followups.
If level 3 is requested and the article cannot be provided, NewsPlex will send a "timeout" notice and close the connection to the news-reader.

It is possible to revert to the normal operation by sending NPRENUMBER 0.

NPREWRITEGROUP Yes Compact the index2 file for the current group, and delete too old zombies. This command is useful for quickly trimming a news-group, notably after setting a shorter NPZOMBIEDAYS value.
NPRESTART Yes Shutdown NewsPlex and restart it immediately. Read-only configuration files will be re-read. The original command-line options will remain active. Once the NewsPlex welcome message is displayed again, it is possible to enter further commands. The previous context of the connection (current news-group, current article, etc.) is lost however.
NPSERVERS Yes Display information about the usage of news-servers. For each news-server, NewsPlex will display whether it has already taken article descriptions from it during the current session or was able to connect at all. Other information is the time since the last successful exploration (0 if none yet), the current speed, the number of articles and article bytes retrieved and the old-style flags (as in the etc/servers.ini file documentation above).
NPSHUT Yes Shutdown NewsPlex. NewsPlex will terminate. This command can take a while to execute, both because some operations are not easily interruptible, and because lots of data may need to be written to disk.
NPTASKS Yes Display the list of currently running and scheduled tasks. A task is something to do asynchronously and not necessarily immediately; tasks are categorized and only a limited number of tasks in the same category are performed in parallel. For each task are displayed:
  • an internal task handle
  • the time remaining until execution. For running or overdue tasks, the time since the task has been running or should have been running
  • the state of the tasks:
    • Wait
    • Run
    • Late
  • the category of the task
  • a description of the task
In addition, a list of categories is displayed, and for each of them:
  • the name of category
  • the count of currently running tasks in category
  • the maximum number of tasks for the category
NPTRIMPOPULAR days [evenRetrieved] No Allows to remove certain not really interesting news-group entries from the etc/groups.sq3 file.

If only days are given, the command removes information about inactive news-groups from which articles have never been retrieved and which have not been accessed in days days. Certain news-readers occasionally issue hundreds or thousands of random GROUP requests, without ever activating the news-groups. The NPTRIMPOPULAR command allows to easily forget about that, after some time.

If evenRetrieved is passed as second argument, even information about inactive news-groups from which articles were retrieved in the past is removed.

There is no lower limit on days.

NPZOMBIEDAYS [zombiedays] Yes Equivalent to the general.zombieDays= setting in etc/newsplex.ini. Without argument, this command displays the current value only.

command-line options

NewsPlex accepts the following command-line options at startup. A list is also provided by the built-in online help in NewsPlex, available through the -h command-line option.

Option Description
-c Delete empty files and directories and exit.
-C Delete all created files and directories and exit. Use with caution. Only certains files in the etc directory will be preserved.
-m Execute in minimal mode. See the description of the explore.minimal= setting for more details. Note that this command-line option will force the above setting in the etc/newsplex.ini file for next runs.
-d dir Use directory dir as work directory for files, rather than the directory from which NewsPlex is started.
-h NewsPlex will print a short help about command-line options and exit.
-i file Import a list of news-server URLs from file and incorporate it into the etc/servers.ini file. A given news-server will be added only if it is not already present (as determined by the login name, the machine name and the port).

This option is interesting in minimal mode, where it allows to pass a list of news-servers to explore. It can eg. be passed together with -m.

Each news-server URL should be on a separate line. Empty lines and leading or trailing blanks are ignored. The news-server URL can optionally be followed, on the same line and separated by blanks, by one or more URLs of proxies. They become server.privateProxy= settings for the news-server.

Note that the format of file is not the same as the previous raw news-server list format.

-v Print name, version, copyright and exit.

Notes about asynchronous article retrieval

In order to optimize asynchronous article retrievals, and notably to obtain a better connection usage, NewsPlex has two ways of performing such downloads, direct and server-available. These ways appear as async and asyncav tasks in the Tasks list respectively. They also have different async/xxxxxxxx.log files.

A direct download is performed by trying to download each article from all news-servers which apply. This method is also used when a news-reader requests an article synchronously.

A server-available download is attempted each time a news-server connection becomes idle (nobody requests a connection to this news-server at the moment), NewsPlex judges it is suitable for downloading the article (for example, the news-server must have declared having it) and the number of such downloads already running is less than the value of the async.serverAvailable= setting. Therefore, there are never any Lateasyncav tasks.

This server-available method does not respect the categorization of news-servers and does not enter into the maximum value of asynchronous article retrievals set with the async.simultaneous= setting. It however does respect the configured maximum number of allowed open connections to each news-server. You should set the reuseForAsync= setting to 0 for news-servers which you do not want to be used for server-available asynchronous article retrievals. You can also disable these downloads globally by setting the async.serverAvailable= setting to 0.

Security and access control

By default NewsPlex only allows logins from the machine on which it runs and all clients can do anything. This applies to both NNTP and Web accesses.

If the access.otherComputers= setting is set, NewsPlex will allow NNTP and Web logins from any machine.

It is possible to protect both NNTP and Web access with passwords. The passwords are the same for both accesses.

Two login and password couples can be used to separately protect user and administrator access.

Web access is protected with the administrator login and password if an administrator login and password are set, and with the user login and password if the user login and password are set and the administrator login and password are not set. When the correct login and password are provided, all functions become available.

If the access.adminLogin= setting and the access.adminPass= setting are defined, administrator NNTP access will be protected and only standard commands will be available to users which did not provide the correct values. People will notably not be able to see what news-servers are used by NewsPlex.

If the access.userLogin= setting and the access.userPass= setting are defined, even normal user access will be protected and only the authentication command will be available until correct authentication data are provided.

If the access.user...= settings are defined but not the access.admin...= settings, every user will be privileged as soon as he logs in. By defining both the access.user...= settings and the access.admin...= settings, one can separately protect both normal user access and administrator access.

If a client news-reader does not have administrator access, retrieved article headers are stripped of Path: and Xref: entries, which give the identity of the news-servers from which the articles come. The Path: entry is useless normally and the Xref: entry mostly too, since it contains article numbers on the originating news-server rather than article numbers on NewsPlex. Note that in the asynchronous article retrieval case, the stripping is done on the fly, depending on the privilege of the news-reader, and the async/xxxxxxxx.ok files on disk are complete.

Adding and deleting news-servers

NewsPlex must be stopped for a news-server to be added to the etc/servers.ini file. Then it should be restarted.

To delete a news-server, for example because it has been unusable for a certain time, first delete the article descriptions which still point to it, using the NPDELETESERVER command, then delete or comment out its entry in the etc/servers.ini file and restart NewsPlex.

Remembering retrieved articles

NewsPlex has a feature which can help you to avoid retrieving the same article twice if you:

This feature is enabled by default starting from version 3.8. It can be controlled with the general.retrievedLog= setting, general.retrievedMark= setting and clients.retrievedShow= setting. It works as follows:

Each time you retrieve an article successfully, NewsPlex stores its Message-ID into the etc/retrievd.sq3 file, and marks the article in the article database.

If a news-reader later requests a full list of articles for a news-group, it will get modified article descriptions: NewsPlex will add a "/r " prefix to the From: field of the article descriptions. If an article was previously from John Doe <john@doe.com> it will become an article from /r John Doe <john@doe.com>.

The articles themselves are not modified when they are actually retrieved.

Normally, news-readers only request new article descriptions, so they do not see the modified article descriptions unless they request everything.

The etc/retrievd.sq3 file allows to keep the information even after the article has vanished from all news-servers where it was present (and the zombie has expired too, or zombies were not enabled), and hence the article description, containing the retrieved status has been deleted.

The startup.applyRetrievd=1 setting makes NewsPlex read the etc/retrievd.sq3 file on startup or restart and mark as retrieved all the articles whose Message-IDs are listed in this file.

This setting is useful if you add a new news-server to the etc/servers.ini file and it has articles which you have already retrieved in the past, but which do not exist in the article database anymore. Except for the old date, such articles would appear as new. If the startup.applyRetrievd=1 is specified, NewsPlex will mark these old articles with "/r " and you will be able to avoid retrieving them again.

There is presently no way of doing the opposite, that is transferring the Message-IDs of previously retrieved articles from the article database into a file.

Exit codes

When NewsPlex terminates, it returns a specific exit code, which expresses the reason for the termination. Presently, the following exit codes are possible. Note that some values are missing; this is because they are no more used.

CodeMeaning
0 "No problem"
1 "Help was printed"
2 "Bad option was passed"
3 "Missing work directory"
4 "Could not open the journal file"
5 "Another server already running on same port"
10 "Could not create the logs directory"
12 "Could not create the list directory"
13 "Could not create the explore directory"
14 "Could not create the async directory"
15 "Option -t not specified but disk is 8.3 only"
16 "Could not create the newsrc directory"
17 "Could not create the index directory"
18 "Could not create the dataset directory"
19 "Could not create the logs/unusable file"
20 "Error in the etc/servers.ini file"
21 "Error when processing the groups list file"
22 "Error when initializing asynchronous retrieval"
23 "Could not establish an NNTP server"
24 "Could not establish a Web server"
25 "Could not create async retrieval threads"
26 "Error when migrating the databases"
27 "Shutdown requested during startup"
28 "Could not create the NNTP server thread"
29 "Could not create the Web server thread"
30 "Could not create the compaction task"
32 "Could not create the memory monitor task"
33 "Article noticed as corrupted during article free operation"
34 "Article noticed as corrupted during article save operation"
35 "Error during synchronization with main server"
36 "Internet not present"
37 "An async retrieval task could not be created"
38 "The log file for NNTP connection could not be created"
39 "The NPSHUT command has been performed"
40 "Cannot initialize the logs/clients file"
41 "Cannot initialize the logs/web file"
42 "Shutdown requested from the web interface"
43 "Shutdown requested by signal"
46 "Article noticed as corrupted during Message-ID compare"
47 "Auto-configuration failed"
48 "Could not create the server update task"
49 "Automatic shutdown after exploring all servers in minimal mode"
50 "Could not read the etc/popular.ini file"
51 "Could not repair the article database"
52 "NNTP server and Web server ports not different"
53 "Internal restart requested from the web interface"
54 "Error when processing the etc/newsplex.ini file"
55 "Auto-configuration done"
56 "Error when importing servers from file"
57 "Internal restart on panic"
58 "Could not create the connect directory"
59 "Service shutdown"
60 "Service operation failed"
61"Error in the etc/servdyna.ini file"
62"Could not initialize the etc/retrievd file"
63"Could not initialize the etc/hidden file"
64"Database migration is required"

Resource exhaustion troubleshooting on Linux

Ed Tomlinson <tomlins@cam.org> has provided the following information regarding fixing resource exhaustion problems appearing when connecting to news-servers (Out of... messages):
I recompiled the kernel uping some hard coded limits on threads and file
descriptors and there are no more (Out of resources). You might want to
note following in the Docs:
/usr/include/linux/limits.h NR_OPEN -> 4096
/usr/include/linux/posix_types.h __FD_SETSIZE -> 4096
in /etc/security.conf add
*soft nofile 2048
*hard nofile 4096
in /etc/pam.d/logon add
session required /lib/security/pam_limits.so
in /usr/include/linux/tasks.h
NR_TASKS = 4090
MIN_TASKS_LEFT_FOR_ROOT = 90
Note MAX_TASKS_PER_USER is limited by glibc to 1000...
The above is for debian frozen potato at 2.2.17pre3
Another hint from Ed:
I got crashes with kernels below 2.2.17pre3. If your system crashes
shortly after starting NewsPlex (it could take up to half an hour
here) try upgrading your kernel.
Christophe Taranotte <ctaranotte@yahoo.fr> provided this advice about running NewsPlex on FreeBSD:
Install linux compatibility distribution (or most
recent linux-base, linux-glib and linuxpthread ports),
unzip and, in the newsplex directory, run at the
prompt:
$ brandelf -t Linux n*
and you are all set

Some other comments regarding Unix

Web resources related to NewsPlex

Please send me email at the mirREMOVETHIS@vlxREMOVETHIS.com address for all questions.

There is currently no real NewsPlex web page, but there are a few places where either the latest Windows and Linux versions or user-contributed materials can be found. The http://newsplex.webstylists.com/download/ directory is the place where I currently upload new releases (courtesy of Mark Thompson). You can also check http://newsplex.webstylists.com/ directly in case I decide to start a real web page. Dave Warren offers a mirror of the files at http://www.intarnut.com/newsplex/, while Pavel Stratil (http://triceron.com) offered a page at http://triceron.com/project/newsplex. Andrew Starr proposes a page at http://www.newsreaders.com/link/newsplex.php.

Stable new Windows versions were in the past uploaded to the ftp://ftp.cdrom.com/pub/simtelnet/news site (Simtel.Net), and sometimes to the http://www.winsite.com site (CICA). In the first case, an announcement was automatically posted to comp.archives.ms-windows.announce.

Stable new OS/2 versions were occasionally uploaded to the ftp://ftp-os2.nmsu.edu/pub/os2/apps/internet/news/server site.

The Solaris and FreeBSD versions can only be obtained from me directly, by email.

NewsPlex is sometimes mentioned or discussed in the news-groups ( alt.usenet.offline-reader.forte-agent, news.software.readers, it.comp.software.newsreader, gmane.network.newsplex and others). You can use http://groups.google.com/ and enter newsplex as search keyword to locate them (or simply click this link).

Joseph Morlan has started a Yahoo Group (mailing list with Web-access) dedicated to NewsPlex at http://groups.yahoo.com/group/NewsPlex/ in December 2002.

More recently, a German-language NewsPlex discussion forum has been established at http://www.newsserverguide.de/thbboard/board.php?boardid=13

Some people maintain references to NewsPlex on their pages. There is also an Italian translation of the manual:

History of updates

Major improvements are in bold.

Version 4.5

In NpMigrat

In NpTunnel

In NpUud

In NpSync

In NewsPlex

What follows is a trimmed and massaged list of updates performed in older versions of NewsPlex. The text here has been trimmed to avoid mentioning obsolete files, bugs, behaviors or features. It has been massaged to present modifications without referring to obsolete elements. Full descriptions of ancient updates are available in help files provided with pre-4.5 versions of NewsPlex.

Version 4.4 (20 November 2005)

In NpSync

In NpTunnel

In NewsPlex

Version 4.3 (19 March 2005)

In NpTunnel

In NpSync

In NpRename

In NpJPEG

In all utilities

In NewsPlex

Version 4.2 (7 March 2004)

In NpUud

In NewsPlex

Version 4.1 (15 January 2004)

In NewsPlex

Version 4.0 (6 January 2004)

In NpCRCs

In NpJPEG

In NpMerge

In NpHdrSep

In NpRename

In NpUud

In NewsPlex

Version 3.9 (11 January 2003)

In NpPost

In NewsPlex

Version 3.8 (19 December 2002)

This release of the NewsPlex package introduces a series of companion tools which can be used eg. for managing files retrieved from the Internet.

In NpPost

In NpCRCs

In NpMove

In NpShow00

In NpMerge

In NpPop3

In NpJPEG

In NpSplit

In NpHdrSep

In NpHdrCat

In NpPrtCmp

In NpRename

In NpNNTP

In NpUud

In GetNNTP

In NewsPlex

Version 3.7 (27 March 2002)

In GetNNTP

In NpUud

In NewsPlex

Version 3.6 (27 August 2001)

Version 3.5 (21 August 2001)

Version 3.4 (5 April 2001)

Version 3.2 (1 March 2001)

Version 3.1 (21 January 2001)

Version 3.0 (11 December 2000)

Version 2.9 (24 Sep 2000)

The descriptions of more ancient updates are available in help files provided with pre-3.9 versions of NewsPlex. Note that all still useful content has been incorporated into the main body of the document.