unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* [afew] announcing afew, an universal tagging solution with some fancy features
@ 2011-12-14 10:42 Justus Winter
  2011-12-14 11:24 ` [afew] announcing afew, Kazuo Teramoto
                   ` (3 more replies)
  0 siblings, 4 replies; 15+ messages in thread
From: Justus Winter @ 2011-12-14 10:42 UTC (permalink / raw)
  To: notmuch

[-- Attachment #1: Type: text/plain, Size: 659 bytes --]

Hey everyone :)

I'd like to introduce my initial tagging approach, afew tags:

https://github.com/teythoon/afew

It has some nifty features, citing the README:

* text classification, magic tags aka the mailing list without server
* spam handling (flush all tags, add spam)
* killed thread handling
* tags posts to lists with lists, $list-id
* autoarchives mails sent from you
* catchall -> remove new, add inbox
* can operate on new messages [default], --all messages or on custom
  query results
* has a --dry-run mode for safe testing
* works with both python2.7 and python3.2

Eagerly waiting for your feedback and patches ;)
Justus

[-- Attachment #2: .signature --]
[-- Type: application/octet-stream, Size: 17 bytes --]

love u alot @,@


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew,
  2011-12-14 10:42 [afew] announcing afew, an universal tagging solution with some fancy features Justus Winter
@ 2011-12-14 11:24 ` Kazuo Teramoto
  2011-12-14 12:10   ` Justus Winter
  2011-12-14 13:07 ` [afew] announcing afew, an universal tagging solution with some fancy features Jani Nikula
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 15+ messages in thread
From: Kazuo Teramoto @ 2011-12-14 11:24 UTC (permalink / raw)
  To: Justus Winter, notmuch

        an universal tagging solution with some fancy features
From: Kazuo Teramoto <kaz.rag@gmail.com>
In-Reply-To: <E1RamIG-0003si-K3@thinkbox.jade-hamburg.de>
On 2011-12-14T08:42:36, Justus Winter wrote:
>I'd like to introduce my initial tagging approach, afew tags:
>
>https://github.com/teythoon/afew
>

Very good! Thanks for it. I'm using it as my only filtering/tagging
solutions and works great.

I created a Arch Linux PKGBUILD, it can be find at [aur] (about it,
Justus how you define the afew license? I put a 'unknown' in the license
as I can give it a names like BSD or GPL or WTFPL).

>* works with both python2.7 and python3.2
>

Python 3 support need the patch set you send to the list, correct?

Regards,
Kazuo

[aur]: https://aur.archlinux.org/packages.php?ID=54532

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew,
  2011-12-14 11:24 ` [afew] announcing afew, Kazuo Teramoto
@ 2011-12-14 12:10   ` Justus Winter
  0 siblings, 0 replies; 15+ messages in thread
From: Justus Winter @ 2011-12-14 12:10 UTC (permalink / raw)
  To: Kazuo Teramoto, notmuch

[-- Attachment #1: Type: text/plain, Size: 943 bytes --]

Quoting Kazuo Teramoto (2011-12-14 12:24:14)
>an universal tagging solution with some fancy features
>From: Kazuo Teramoto <kaz.rag@gmail.com>
>In-Reply-To: <E1RamIG-0003si-K3@thinkbox.jade-hamburg.de>
>On 2011-12-14T08:42:36, Justus Winter wrote:
>>I'd like to introduce my initial tagging approach, afew tags:
>>
>>https://github.com/teythoon/afew
>>
>
>Very good! Thanks for it. I'm using it as my only filtering/tagging
>solutions and works great.
>
>I created a Arch Linux PKGBUILD, it can be find at [aur]

Cool :)

> (about it,
>Justus how you define the afew license? I put a 'unknown' in the license
>as I can give it a names like BSD or GPL or WTFPL).

afew is licensed under a modern BSD license (I used the openbsd
license). It is included in every source file.

>>* works with both python2.7 and python3.2
>
>Python 3 support need the patch set you send to the list, correct?

Yes.

Cheers,
Justus

[-- Attachment #2: .signature --]
[-- Type: application/octet-stream, Size: 17 bytes --]

love u alot @,@


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2011-12-14 10:42 [afew] announcing afew, an universal tagging solution with some fancy features Justus Winter
  2011-12-14 11:24 ` [afew] announcing afew, Kazuo Teramoto
@ 2011-12-14 13:07 ` Jani Nikula
  2011-12-14 16:59 ` Patrick Totzke
  2012-02-27 21:10 ` James Vasile
  3 siblings, 0 replies; 15+ messages in thread
From: Jani Nikula @ 2011-12-14 13:07 UTC (permalink / raw)
  To: Justus Winter, notmuch

On Wed, 14 Dec 2011 11:42:36 +0100, Justus Winter <4winter@informatik.uni-hamburg.de> wrote:
> https://github.com/teythoon/afew
> 
> It has some nifty features, citing the README:

"""
Basic tagging stuff requires no configuration, just run

$ afew --tag --new

To do this automatically you can add the following hook into your
~/.offlineimaprc:

postsynchook = ionice -c 3 chrt --idle 0 /bin/sh -c "notmuch new && afew
--tag --new"
"""

FYI, "notmuch new" now supports hooks you can use for this. Currently
only in the git repo, though.

BR,
Jani.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2011-12-14 10:42 [afew] announcing afew, an universal tagging solution with some fancy features Justus Winter
  2011-12-14 11:24 ` [afew] announcing afew, Kazuo Teramoto
  2011-12-14 13:07 ` [afew] announcing afew, an universal tagging solution with some fancy features Jani Nikula
@ 2011-12-14 16:59 ` Patrick Totzke
  2011-12-19 14:13   ` Justus Winter
  2012-02-27 21:10 ` James Vasile
  3 siblings, 1 reply; 15+ messages in thread
From: Patrick Totzke @ 2011-12-14 16:59 UTC (permalink / raw)
  To: Justus Winter, notmuch

Hi Justus,

I have just tried your script and have some questions/remarks about it:

* mkdir -p ~/.config/afew ~/.local/share/afew/categories
  As far as I can see, this is not needed if one doesn't use ClassifyingFilter,
  so its OK not to do this directly from the setup.py somehow.
  But it would be nice if a first run uf `afew --learn` would
  create these (or die gracefully instead of raising the afew.DBACL.BackendError).

* if you renamed the README & co to include the suffix ".md" github would nicely
  render them on the project page.

* I need some more info on how the config works: first, the order in which the
  sections are defined specifies the filter-pipeline yes?
  Secondly, what exactly is a "filter object" in the config?
  Specifically, what do these 3 lines do:
  https://github.com/teythoon/afew/blob/master/docs/tag_filters#L39

* this is surely a user error: I cannot use afew for initial tagging as expected:
  I installed as stated in the README,
  trained some of my existing tags and called `afew --update-reference` and `afew --update`.
  The test with `afew --classify -- ..` works nicely.
  Now I tagges all my mails with is:new, and called `afew --tag --new`.
  This returns immediately without output and all my messages are still tagged new.
  Also, -vv does not result in any output..
  ideas?

Looking forward to replacing my sort script with this.
Thanks,
/p

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2011-12-14 16:59 ` Patrick Totzke
@ 2011-12-19 14:13   ` Justus Winter
  2011-12-19 17:57     ` Jameson Graef Rollins
  0 siblings, 1 reply; 15+ messages in thread
From: Justus Winter @ 2011-12-19 14:13 UTC (permalink / raw)
  To: Patrick Totzke, notmuch

[-- Attachment #1: Type: text/plain, Size: 2307 bytes --]

Hey Pazz :)

Quoting Patrick Totzke (2011-12-14 17:59:43)
>Hi Justus,
>
>I have just tried your script and have some questions/remarks about it:
>
>* mkdir -p ~/.config/afew ~/.local/share/afew/categories
>  As far as I can see, this is not needed if one doesn't use ClassifyingFilter,
>  so its OK not to do this directly from the setup.py somehow.
>  But it would be nice if a first run uf `afew --learn` would
>  create these (or die gracefully instead of raising the afew.DBACL.BackendError).

Ah yes. Good point...

>* if you renamed the README & co to include the suffix ".md" github would nicely
>  render them on the project page.

Will do that.

>* I need some more info on how the config works: first, the order in which the
>  sections are defined specifies the filter-pipeline yes?

Yes.

>  Secondly, what exactly is a "filter object" in the config?

Well, you can define filter types either in the configuration file or
in pure python code (see afew/filters). To use them, you need to
create instances of these types.

The config file is just another way of defining python classes and
creating objects. See afew/Settings.py for details.

>  Specifically, what do these 3 lines do:
>  https://github.com/teythoon/afew/blob/master/docs/tag_filters#L39

They create two objects (ShitFilter.0 and ShitFilter.1) of type
ShitFilter (defined in line 32-33). ShitFilter inherits from
SpamFilter and adjusts the message field. ShitFilter.1 also customizes
the message.

>* this is surely a user error: I cannot use afew for initial tagging as expected:
>  I installed as stated in the README,
>  trained some of my existing tags and called `afew --update-reference` and `afew --update`.
>  The test with `afew --classify -- ..` works nicely.
>  Now I tagges all my mails with is:new, and called `afew --tag --new`.
>  This returns immediately without output and all my messages are still tagged new.
>  Also, -vv does not result in any output..
>  ideas?

Is your new tag called 'is:new'? Mine is just called 'new'. That could
be a problem since 'new' as tag for new mails is currently hardcoded
at various locations. I thought it was universally accepted, but then
again hardcoding these things is obviously a bad practice...

Cheers,
Justus

[-- Attachment #2: .signature --]
[-- Type: application/octet-stream, Size: 17 bytes --]

love u alot @,@


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2011-12-19 14:13   ` Justus Winter
@ 2011-12-19 17:57     ` Jameson Graef Rollins
  2011-12-19 18:17       ` Patrick Totzke
  2011-12-21  8:38       ` Justus Winter
  0 siblings, 2 replies; 15+ messages in thread
From: Jameson Graef Rollins @ 2011-12-19 17:57 UTC (permalink / raw)
  To: Justus Winter, Patrick Totzke, notmuch

[-- Attachment #1: Type: text/plain, Size: 650 bytes --]

On Mon, 19 Dec 2011 15:13:51 +0100, Justus Winter <4winter@informatik.uni-hamburg.de> wrote:
> Is your new tag called 'is:new'? Mine is just called 'new'

is: is a search prefix, synonymous with tag:

> That could be a problem since 'new' as tag for new mails is currently
> hardcoded at various locations. I thought it was universally accepted,
> but then again hardcoding these things is obviously a bad practice...

Tags for new messages is configurable with the new.tags config setting.
If you're program needs to know that setting, I suggest it retrieve it
From the notmuch config directly ("notmuch config get new.tags").

jamie.

[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2011-12-19 17:57     ` Jameson Graef Rollins
@ 2011-12-19 18:17       ` Patrick Totzke
  2011-12-21  8:53         ` Justus Winter
  2011-12-21  8:38       ` Justus Winter
  1 sibling, 1 reply; 15+ messages in thread
From: Patrick Totzke @ 2011-12-19 18:17 UTC (permalink / raw)
  To: Jameson Graef Rollins, Justus Winter, notmuch

Quoting Jameson Graef Rollins (2011-12-19 17:57:00)
>On Mon, 19 Dec 2011 15:13:51 +0100, Justus Winter <4winter@informatik.uni-hamburg.de> wrote:
>> Is your new tag called 'is:new'? Mine is just called 'new'
>
>is: is a search prefix, synonymous with tag:

Apologies, that was misleading:
my new tag is "new", just like yours.
Also, should i not get some output when calling afew with -vv ?

/p

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2011-12-19 17:57     ` Jameson Graef Rollins
  2011-12-19 18:17       ` Patrick Totzke
@ 2011-12-21  8:38       ` Justus Winter
  1 sibling, 0 replies; 15+ messages in thread
From: Justus Winter @ 2011-12-21  8:38 UTC (permalink / raw)
  To: Jameson Graef Rollins, Patrick Totzke, notmuch

[-- Attachment #1: Type: text/plain, Size: 814 bytes --]

Hey Jamie :)

Quoting Jameson Graef Rollins (2011-12-19 18:57:00)
>On Mon, 19 Dec 2011 15:13:51 +0100, Justus Winter <4winter@informatik.uni-hamburg.de> wrote:
>> Is your new tag called 'is:new'? Mine is just called 'new'
>
>is: is a search prefix, synonymous with tag:

Ah, thanks for the clarification.

>> That could be a problem since 'new' as tag for new mails is currently
>> hardcoded at various locations. I thought it was universally accepted,
>> but then again hardcoding these things is obviously a bad practice...
>
>Tags for new messages is configurable with the new.tags config setting.
>If you're program needs to know that setting, I suggest it retrieve it
From the notmuch config directly ("notmuch config get new.tags").

That's a nice touch, it's implemented now :)

Justus

[-- Attachment #2: .signature --]
[-- Type: application/octet-stream, Size: 17 bytes --]

love u alot @,@


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2011-12-19 18:17       ` Patrick Totzke
@ 2011-12-21  8:53         ` Justus Winter
  2012-01-20 10:40           ` Patrick Totzke
  0 siblings, 1 reply; 15+ messages in thread
From: Justus Winter @ 2011-12-21  8:53 UTC (permalink / raw)
  To: Patrick Totzke, Jameson Graef Rollins, notmuch

[-- Attachment #1: Type: text/plain, Size: 1903 bytes --]

Hey Pazz,

Quoting Patrick Totzke (2011-12-19 19:17:12)
>Also, should i not get some output when calling afew with -vv ?

Yes you should ;). Here's an example run on my box:

teythoon@thinkbox ~/repos/afew (git)-[master] % python3.2 bin/afew -vv --tag --new
INFO:root:Tagging spam messages
DEBUG:root:Executing query '(tag:new)'
INFO:root:Committing changes to 0 messages
INFO:root:Tagging via classification
DEBUG:root:Executing query '(tag:new)'
DEBUG:root:executing ['dbacl', '-c', ..., '-n']
INFO:root:Committing changes to 1 messages
INFO:root:Looking for messages in killed threads that are not yet killed
DEBUG:root:Executing query '((tag:new)) AND (NOT tag:killed)'
DEBUG:root:Executing query 'thread:"0000000000005d6e" AND tag:killed'
DEBUG:root:Executing query 'thread:"0000000000005d6d" AND tag:killed'
INFO:root:Committing changes to 0 messages
INFO:root:Tagging mailing list posts
DEBUG:root:Executing query '((tag:new)) AND (NOT tag:lists)'
INFO:root:Committing changes to 0 messages
INFO:root:No message specified for filter
DEBUG:root:Executing query '((tag:new)) AND (subject:"[Mafia]")'
INFO:root:Committing changes to 0 messages
INFO:root:Archiving all mails sent by myself
DEBUG:root:Executing query '((tag:new)) AND (from:"4winter@informatik.uni-hamburg.de" OR from:"teythoon@jade-hamburg.de")'
INFO:root:Committing changes to 0 messages
INFO:root:Retags all messages not tagged as junk or killed as inbox
DEBUG:root:Executing query '((tag:new)) AND ((tag:new))'
DEBUG:root:Removing tags new from "Fachschaftsratsvernetzung" <fachschaftsrat@asta.uni-hamburg.de> (new unread) (2011-12-21)
DEBUG:root:Adding tags inbox to "Fachschaftsratsvernetzung" <fachschaftsrat@asta.uni-hamburg.de> (new unread) (2011-12-21)
INFO:root:Committing changes to 1 messages

If you don't get any output at all you might try using the strace
hammer again.

Justus

[-- Attachment #2: .signature --]
[-- Type: application/octet-stream, Size: 17 bytes --]

love u alot @,@


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2011-12-21  8:53         ` Justus Winter
@ 2012-01-20 10:40           ` Patrick Totzke
  2012-01-20 11:26             ` Justus Winter
  0 siblings, 1 reply; 15+ messages in thread
From: Patrick Totzke @ 2012-01-20 10:40 UTC (permalink / raw)
  To: Justus Winter, Jameson Graef Rollins, notmuch

Quoting Justus Winter (2011-12-21 08:53:23)
>Hey Pazz,
>
>Quoting Patrick Totzke (2011-12-19 19:17:12)
>>Also, should i not get some output when calling afew with -vv ?
>
>Yes you should ;). Here's an example run on my box:
Alright, I do get logging output with upstream master thanks.

FYI: I found the problem with afew not finding new mails on my box.
I had the following in my ~/.notmuch-config:


        #       tags    A list (separated by ';') of the tags that will be
        #               added to all messages incorporated by "notmuch new".
        #
        [new]
        tags=new;

I suspect you don't split the config value and thus afew ended up with a false tag "new;".
its just cosmetics but nevertheless..

Thanks for afew! I translated my static filter rules and am very much enjoying the automagic list-id tags :)
/p

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2012-01-20 10:40           ` Patrick Totzke
@ 2012-01-20 11:26             ` Justus Winter
  2012-01-20 21:55               ` Kazuo Teramoto
  0 siblings, 1 reply; 15+ messages in thread
From: Justus Winter @ 2012-01-20 11:26 UTC (permalink / raw)
  To: Patrick Totzke, Jameson Graef Rollins, notmuch

Quoting Patrick Totzke (2012-01-20 11:40:41)
>Quoting Justus Winter (2011-12-21 08:53:23)
>>Hey Pazz,
>>
>>Quoting Patrick Totzke (2011-12-19 19:17:12)
>>>Also, should i not get some output when calling afew with -vv ?
>>
>>Yes you should ;). Here's an example run on my box:
>Alright, I do get logging output with upstream master thanks.
>
>FYI: I found the problem with afew not finding new mails on my box.
>I had the following in my ~/.notmuch-config:
>
>
>        #       tags    A list (separated by ';') of the tags that will be
>        #               added to all messages incorporated by "notmuch new".
>        #
>        [new]
>        tags=new;
>
>I suspect you don't split the config value and thus afew ended up with a false tag "new;".
>its just cosmetics but nevertheless..

Hm, actually it does exactly that:

def get_notmuch_new_tags():
    return notmuch_settings.get('new', 'tags').split(';')

Could you post the relevant log messages?

>Thanks for afew! I translated my static filter rules and am very much enjoying the automagic list-id tags :)
>/p

Cool :)

Cheers,
Justus

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2012-01-20 11:26             ` Justus Winter
@ 2012-01-20 21:55               ` Kazuo Teramoto
  2012-01-21  0:13                 ` Justus Winter
  0 siblings, 1 reply; 15+ messages in thread
From: Kazuo Teramoto @ 2012-01-20 21:55 UTC (permalink / raw)
  To: Justus Winter; +Cc: Patrick Totzke, notmuch

[-- Attachment #1: Type: text/plain, Size: 636 bytes --]

On Fri, Jan 20, 2012 at 12:26:05PM +0100, Justus Winter wrote:
> Quoting Patrick Totzke (2012-01-20 11:40:41)
> >I suspect you don't split the config value and thus afew ended up
> >with a false tag "new;". its just cosmetics but nevertheless..
> 
> Hm, actually it does exactly that:
> 
> def get_notmuch_new_tags():
>     return notmuch_settings.get('new', 'tags').split(';')

The problem, I think, is caused by how python split the string
~~~~~~~~~~
>>> 'new;'.split(';')
['new', '']
~~~~~~~~~~

So afew pass a query with 'tag:""' and it don't match any message. What
about putting a strip(';') before the split()?

[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2012-01-20 21:55               ` Kazuo Teramoto
@ 2012-01-21  0:13                 ` Justus Winter
  0 siblings, 0 replies; 15+ messages in thread
From: Justus Winter @ 2012-01-21  0:13 UTC (permalink / raw)
  To: Kazuo Teramoto; +Cc: Patrick Totzke, notmuch

Quoting Kazuo Teramoto (2012-01-20 22:55:08)
>On Fri, Jan 20, 2012 at 12:26:05PM +0100, Justus Winter wrote:
>> Quoting Patrick Totzke (2012-01-20 11:40:41)
>> >I suspect you don't split the config value and thus afew ended up
>> >with a false tag "new;". its just cosmetics but nevertheless..
>> 
>> Hm, actually it does exactly that:
>> 
>> def get_notmuch_new_tags():
>>     return notmuch_settings.get('new', 'tags').split(';')
>
>The problem, I think, is caused by how python split the string
>~~~~~~~~~~
>>>> 'new;'.split(';')
>['new', '']
>~~~~~~~~~~
>
>So afew pass a query with 'tag:""' and it don't match any message.

You are totally right, fix pushed.

Thanks,
Justus

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [afew] announcing afew, an universal tagging solution with some fancy features
  2011-12-14 10:42 [afew] announcing afew, an universal tagging solution with some fancy features Justus Winter
                   ` (2 preceding siblings ...)
  2011-12-14 16:59 ` Patrick Totzke
@ 2012-02-27 21:10 ` James Vasile
  3 siblings, 0 replies; 15+ messages in thread
From: James Vasile @ 2012-02-27 21:10 UTC (permalink / raw)
  To: Justus Winter, notmuch

I'm tring to figure out how to use afew.  It looks interesting, but
gives me surprising results.

I did `afew --learn spam -- tag:spam` and believe this tells afew that
all the messages matching tag:spam should be classified as spam.  But if
that is right, why would `afew -c spam -- tag:spam` then show me a bunch
of messages that are tagged spam by notmuch but not classified spam by
afew?

How do I train afew when I correct it's mistakes?  Is that what `afew
update` is for?  What does "update the reference category" mean?

Thanks much,
James

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2012-02-27 21:21 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-12-14 10:42 [afew] announcing afew, an universal tagging solution with some fancy features Justus Winter
2011-12-14 11:24 ` [afew] announcing afew, Kazuo Teramoto
2011-12-14 12:10   ` Justus Winter
2011-12-14 13:07 ` [afew] announcing afew, an universal tagging solution with some fancy features Jani Nikula
2011-12-14 16:59 ` Patrick Totzke
2011-12-19 14:13   ` Justus Winter
2011-12-19 17:57     ` Jameson Graef Rollins
2011-12-19 18:17       ` Patrick Totzke
2011-12-21  8:53         ` Justus Winter
2012-01-20 10:40           ` Patrick Totzke
2012-01-20 11:26             ` Justus Winter
2012-01-20 21:55               ` Kazuo Teramoto
2012-01-21  0:13                 ` Justus Winter
2011-12-21  8:38       ` Justus Winter
2012-02-27 21:10 ` James Vasile

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).