Debian Bug report logs - #579788
amule: share directory on external disk isn't persistent

version graph

Package: amule; Maintainer for amule is Sandro Tosi <morph@debian.org>; Source for amule is src:amule (PTS, buildd, popcon).

Reported by: Celejar <celejar@gmail.com>

Date: Fri, 30 Apr 2010 18:57:01 UTC

Severity: normal

Found in version amule/2.2.6+debian0-7

Done: Sandro Tosi <morph@debian.org>

Bug is archived. No further changes may be made.

Forwarded to http://www.amule.org/abugs/view.php?id=1617

Toggle useless messages

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to debian-bugs-dist@lists.debian.org, Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>:
Bug#579788; Package amule. (Fri, 30 Apr 2010 18:57:04 GMT) (full text, mbox, link).


Acknowledgement sent to Celejar <celejar@gmail.com>:
New Bug report received and forwarded. Copy sent to Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>. (Fri, 30 Apr 2010 18:57:04 GMT) (full text, mbox, link).


Message #5 received at submit@bugs.debian.org (full text, mbox, reply):

From: Celejar <celejar@gmail.com>
To: Debian Bug Tracking System <submit@bugs.debian.org>
Subject: amule: share directory on external disk isn't persistent
Date: Fri, 30 Apr 2010 14:54:09 -0400
Package: amule
Version: 2.2.6+debian0-7
Severity: normal


I have a directory of files that I want to share on an external, USB disk (it's
on LVM, in case that's relevant).  I set the directory from Preferences /
Directories / Shared, and it seems to work, but when I unplug the disk and
later replug it, the directory is no longer present, and I have to once again
manually enter the directory by navigating the file tree.

-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)

Kernel: Linux 2.6.34-rc5-lizzie-00023-g05ce7bf
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages amule depends on:
ii  amule-common          2.2.6+debian0-7    common files for the rest of aMule
ii  libc6                 2.10.2-6           Embedded GNU C Library: Shared lib
ii  libcrypto++8          5.6.0-5            General purpose cryptographic libr
ii  libgcc1               1:4.4.3-9          GCC support library
ii  libgeoip1             1.4.7~beta3+dfsg-1 A non-DNS IP-to-country resolver l
ii  libstdc++6            4.4.3-9            The GNU Standard C++ Library v3
ii  libupnp3              1:1.6.6-4          Portable SDK for UPnP Devices, ver
ii  libwxbase2.8-0        2.8.10.1-3         wxBase library (runtime) - non-GUI
ii  libwxgtk2.8-0         2.8.10.1-3         wxWidgets Cross-platform C++ GUI t
ii  zlib1g                1:1.2.3.4.dfsg-3   compression library - runtime

Versions of packages amule recommends:
ii  amule-utils              2.2.6+debian0-7 utilities for aMule (command-line 
ii  unzip                    6.0-4           De-archiver for .zip files

Versions of packages amule suggests:
pn  amule-utils-gui               <none>     (no description available)

-- no debconf information




Information forwarded to debian-bugs-dist@lists.debian.org, Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>:
Bug#579788; Package amule. (Sat, 01 May 2010 12:36:04 GMT) (full text, mbox, link).


Acknowledgement sent to werner@vollstreckernet.de:
Extra info received and forwarded to list. Copy sent to Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>. (Sat, 01 May 2010 12:36:04 GMT) (full text, mbox, link).


Message #10 received at 579788@bugs.debian.org (full text, mbox, reply):

From: Werner Mahr <werner@vollstreckernet.de>
To: Celejar <celejar@gmail.com>, 579788@bugs.debian.org
Subject: Re: [Pkg-amule-devel] Bug#579788: amule: share directory on external disk isn't persistent
Date: Sat, 1 May 2010 14:10:18 +0200
Am Freitag 30 April 2010 schrieb Celejar:

>  when I unplug the disk and later replug it, the directory is no
>  longer present, and I have to once again manually enter the
>  directory by navigating the file tree.

Absolute correct. When you delete a file, it's being removed from shares 
on next access, same applies for deleted dirs and unplugged USB-Discs. 
Otherwise you'll get a file not found message on every access, which 
would be worse. We could keep the entry for the dir you mount the disc 
in the list and just ignore it, which would cause the list of shares to 
grow. In this case every deleted file or dir will stay in there, and 
startup would take longer and longer because they have to be checked all 
to see if they reappeared, and most likely they would be rehashed to see 
if they are still the same file.

Just don't unplug the disc while aMule is running, and everything is 
fine.

-- 
MfG usw.

Werner Mahr
registered Linuxuser: 295882




Information forwarded to debian-bugs-dist@lists.debian.org, Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>:
Bug#579788; Package amule. (Sun, 02 May 2010 02:12:03 GMT) (full text, mbox, link).


Acknowledgement sent to Celejar <celejar@gmail.com>:
Extra info received and forwarded to list. Copy sent to Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>. (Sun, 02 May 2010 02:12:03 GMT) (full text, mbox, link).


Message #15 received at 579788@bugs.debian.org (full text, mbox, reply):

From: Celejar <celejar@gmail.com>
To: werner@vollstreckernet.de
Cc: 579788@bugs.debian.org
Subject: Re: [Pkg-amule-devel] Bug#579788: amule: share directory on external disk isn't persistent
Date: Sat, 1 May 2010 22:10:09 -0400
On Sat, 1 May 2010 14:10:18 +0200
Werner Mahr <werner@vollstreckernet.de> wrote:

> Am Freitag 30 April 2010 schrieb Celejar:
> 
> >  when I unplug the disk and later replug it, the directory is no
> >  longer present, and I have to once again manually enter the
> >  directory by navigating the file tree.
> 
> Absolute correct. When you delete a file, it's being removed from shares 
> on next access, same applies for deleted dirs and unplugged USB-Discs. 
> Otherwise you'll get a file not found message on every access, which 
> would be worse. We could keep the entry for the dir you mount the disc 
> in the list and just ignore it, which would cause the list of shares to 
> grow. In this case every deleted file or dir will stay in there, and 
> startup would take longer and longer because they have to be checked all 
> to see if they reappeared, and most likely they would be rehashed to see 
> if they are still the same file.
> 
> Just don't unplug the disc while aMule is running, and everything is 
> fine.

Thanks for the explanation.  But the disk is not always available, and
I sometimes want to run aMule when the disk isn't there.  In such a
case, isn't the directory still deleted?

Perhaps there could be some sort of option to mark certain special
directories as 'persistent', so this way we could have the best of both
worlds.  Ordinary files and directories will be automatically removed,
to avoid the problems you mention, but some basic share directories
could be allowed to remain, to avoid the user having to reenter them
frequently.

Regarding the problem of having constant 'file not found' errors,
there's anyway a "Reload shared files" button on the shared files
page.  Why not just mark any files or directories not found as
'inactive' or something, and recheck them when the user hits that
button?

Thanks again, and thanks for your Debian work in general,
Celejar
-- 
foffl.sourceforge.net - Feeds OFFLine, an offline RSS/Atom aggregator
mailmin.sourceforge.net - remote access via secure (OpenPGP) email
ssuds.sourceforge.net - A Simple Sudoku Solver and Generator





Information forwarded to debian-bugs-dist@lists.debian.org, Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>:
Bug#579788; Package amule. (Sun, 02 May 2010 08:24:05 GMT) (full text, mbox, link).


Acknowledgement sent to werner@vollstreckernet.de:
Extra info received and forwarded to list. Copy sent to Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>. (Sun, 02 May 2010 08:24:05 GMT) (full text, mbox, link).


Message #20 received at 579788@bugs.debian.org (full text, mbox, reply):

From: Werner Mahr <werner@vollstreckernet.de>
To: Celejar <celejar@gmail.com>, 579788@bugs.debian.org
Subject: Re: [Pkg-amule-devel] Bug#579788: Bug#579788: amule: share directory on external disk isn't persistent
Date: Sun, 2 May 2010 10:19:49 +0200
Am Sonntag 02 Mai 2010 schrieb Celejar:

> Thanks for the explanation.  But the disk is not always available,
>  and I sometimes want to run aMule when the disk isn't there.  In
>  such a case, isn't the directory still deleted?

Exactly.

> Perhaps there could be some sort of option to mark certain special
> directories as 'persistent', so this way we could have the best of
>  both worlds.

This would need a change of the config file, which isn't used only by 
aMule. We don't care much about the mods out there, but emule has to be 
able to read these files, too. Beside the fact that there is a change 
for the gui needed to implement this, and these files are still locked.

> Regarding the problem of having constant 'file not found' errors,
> there's anyway a "Reload shared files" button on the shared files
> page.  Why not just mark any files or directories not found as
> 'inactive' or something, and recheck them when the user hits that
> button?

The problem with this is, that only dirs are shared. We don't care about 
single files in this part of the source. The easiest way for you is to 
just insert the dir, when you plug the disk in.

echo "your-mountpoint" >> ~/.aMule/shareddir.dat and then reloading the 
shared files should do the trick. With the right udev-rules you can 
automate this, too.

-- 
MfG usw.

Werner Mahr
registered Linuxuser: 295882




Information forwarded to debian-bugs-dist@lists.debian.org, Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>:
Bug#579788; Package amule. (Mon, 03 May 2010 01:36:03 GMT) (full text, mbox, link).


Acknowledgement sent to Celejar <celejar@gmail.com>:
Extra info received and forwarded to list. Copy sent to Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>. (Mon, 03 May 2010 01:36:04 GMT) (full text, mbox, link).


Message #25 received at 579788@bugs.debian.org (full text, mbox, reply):

From: Celejar <celejar@gmail.com>
To: werner@vollstreckernet.de
Cc: 579788@bugs.debian.org
Subject: Re: [Pkg-amule-devel] Bug#579788: Bug#579788: amule: share directory on external disk isn't persistent
Date: Sun, 2 May 2010 21:31:54 -0400
On Sun, 2 May 2010 10:19:49 +0200
Werner Mahr <werner@vollstreckernet.de> wrote:

> Am Sonntag 02 Mai 2010 schrieb Celejar:
> 
> > Thanks for the explanation.  But the disk is not always available,
> >  and I sometimes want to run aMule when the disk isn't there.  In
> >  such a case, isn't the directory still deleted?
> 
> Exactly.

Hm, I see now that I'm running aMule, having started it without the
external disk plugged in, after having previously shut it down while
the external disk had still been plugged in, and the directory from the
external disk actually has remained in the shareddir.dat, even though
the directory doesn't exist currently on disk, and it stays there even
after I hit 'reload shared files'. Does it actually only get removed
when the disk is pulled while aMule is running?

> > Perhaps there could be some sort of option to mark certain special
> > directories as 'persistent', so this way we could have the best of
> >  both worlds.
> 
> This would need a change of the config file, which isn't used only by 
> aMule. We don't care much about the mods out there, but emule has to be 
> able to read these files, too. Beside the fact that there is a change 
> for the gui needed to implement this, and these files are still locked.

Okay.
 
> > Regarding the problem of having constant 'file not found' errors,
> > there's anyway a "Reload shared files" button on the shared files
> > page.  Why not just mark any files or directories not found as
> > 'inactive' or something, and recheck them when the user hits that
> > button?
> 
> The problem with this is, that only dirs are shared. We don't care about 
> single files in this part of the source. The easiest way for you is to 
> just insert the dir, when you plug the disk in.
> 
> echo "your-mountpoint" >> ~/.aMule/shareddir.dat and then reloading the 
> shared files should do the trick. With the right udev-rules you can 
> automate this, too.

The 'echo' is simple enough, but I suppose there's no way to script
the 'reload' command?  [The manpage doesn't indicate that amulecmd
can do this.]

Celejar
-- 
foffl.sourceforge.net - Feeds OFFLine, an offline RSS/Atom aggregator
mailmin.sourceforge.net - remote access via secure (OpenPGP) email
ssuds.sourceforge.net - A Simple Sudoku Solver and Generator





Information forwarded to debian-bugs-dist@lists.debian.org, Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>:
Bug#579788; Package amule. (Mon, 03 May 2010 10:21:06 GMT) (full text, mbox, link).


Acknowledgement sent to werner@vollstreckernet.de:
Extra info received and forwarded to list. Copy sent to Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>. (Mon, 03 May 2010 10:21:06 GMT) (full text, mbox, link).


Message #30 received at 579788@bugs.debian.org (full text, mbox, reply):

From: Werner Mahr <werner@vollstreckernet.de>
To: Celejar <celejar@gmail.com>, 579788@bugs.debian.org
Subject: Re: [Pkg-amule-devel] Bug#579788: Bug#579788: Bug#579788: amule: share directory on external disk isn't persistent
Date: Mon, 3 May 2010 12:16:33 +0200
Am Montag 03 Mai 2010 schrieb Celejar:

> Hm, I see now that I'm running aMule, having started it without the
> external disk plugged in, after having previously shut it down while
> the external disk had still been plugged in, and the directory from
>  the external disk actually has remained in the shareddir.dat, even
>  though the directory doesn't exist currently on disk, and it stays
>  there even after I hit 'reload shared files'. Does it actually only
>  get removed when the disk is pulled while aMule is running?

Iirc, the files is read on startup and written on shutdown.

> > echo "your-mountpoint" >> ~/.aMule/shareddir.dat and then reloading
> > the shared files should do the trick. With the right udev-rules you
> > can automate this, too.
> 
> The 'echo' is simple enough, but I suppose there's no way to script
> the 'reload' command?  [The manpage doesn't indicate that amulecmd
> can do this.]

Unfortunately this is a feature of svn. With the stable series this 
click has to be done by you.

-- 
MfG usw.

Werner Mahr
registered Linuxuser: 295882




Information forwarded to debian-bugs-dist@lists.debian.org, Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>:
Bug#579788; Package amule. (Mon, 03 May 2010 21:03:02 GMT) (full text, mbox, link).


Acknowledgement sent to Celejar <celejar@gmail.com>:
Extra info received and forwarded to list. Copy sent to Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>. (Mon, 03 May 2010 21:03:03 GMT) (full text, mbox, link).


Message #35 received at 579788@bugs.debian.org (full text, mbox, reply):

From: Celejar <celejar@gmail.com>
To: werner@vollstreckernet.de
Cc: 579788@bugs.debian.org
Subject: Re: [Pkg-amule-devel] Bug#579788: Bug#579788: Bug#579788: amule: share directory on external disk isn't persistent
Date: Mon, 3 May 2010 17:01:37 -0400
On Mon, 3 May 2010 12:16:33 +0200
Werner Mahr <werner@vollstreckernet.de> wrote:

> Am Montag 03 Mai 2010 schrieb Celejar:
> 
> > Hm, I see now that I'm running aMule, having started it without the
> > external disk plugged in, after having previously shut it down while
> > the external disk had still been plugged in, and the directory from
> >  the external disk actually has remained in the shareddir.dat, even
> >  though the directory doesn't exist currently on disk, and it stays
> >  there even after I hit 'reload shared files'. Does it actually only
> >  get removed when the disk is pulled while aMule is running?
> 
> Iirc, the files is read on startup and written on shutdown.
> 
> > > echo "your-mountpoint" >> ~/.aMule/shareddir.dat and then reloading
> > > the shared files should do the trick. With the right udev-rules you
> > > can automate this, too.
> > 
> > The 'echo' is simple enough, but I suppose there's no way to script
> > the 'reload' command?  [The manpage doesn't indicate that amulecmd
> > can do this.]
> 
> Unfortunately this is a feature of svn. With the stable series this 
> click has to be done by you.

Okay, thanks for the help,
Celejar
-- 
foffl.sourceforge.net - Feeds OFFLine, an offline RSS/Atom aggregator
mailmin.sourceforge.net - remote access via secure (OpenPGP) email
ssuds.sourceforge.net - A Simple Sudoku Solver and Generator





Information forwarded to debian-bugs-dist@lists.debian.org, Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>:
Bug#579788; Package amule. (Fri, 07 May 2010 19:57:03 GMT) (full text, mbox, link).


Acknowledgement sent to Celejar <celejar@gmail.com>:
Extra info received and forwarded to list. Copy sent to Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>. (Fri, 07 May 2010 19:57:03 GMT) (full text, mbox, link).


Message #40 received at 579788@bugs.debian.org (full text, mbox, reply):

From: Celejar <celejar@gmail.com>
To: werner@vollstreckernet.de
Cc: 579788@bugs.debian.org
Subject: Re: [Pkg-amule-devel] Bug#579788: Bug#579788: amule: share directory on external disk isn't persistent
Date: Fri, 7 May 2010 15:54:17 -0400
On Sun, 2 May 2010 10:19:49 +0200
Werner Mahr <werner@vollstreckernet.de> wrote:

...

> echo "your-mountpoint" >> ~/.aMule/shareddir.dat and then reloading the 
> shared files should do the trick. With the right udev-rules you can 
> automate this, too.

Whenever I do this, the new directory gets appended to the last entry
in the file, without a newline separating them, which clobbers both
directiories, e.g.:

/home/user/.aMule/Incoming/media/storage/user/dir

I assume that the problem is that when aMule removes dead directories,
it also removes the last newline.

I don't know if you're allowed to change aMule's behavior in this
regard, but if you can't, then I'm just noting here, FTR, that the echo
command needs a newline before the new directory.

Celejar
-- 
foffl.sourceforge.net - Feeds OFFLine, an offline RSS/Atom aggregator
mailmin.sourceforge.net - remote access via secure (OpenPGP) email
ssuds.sourceforge.net - A Simple Sudoku Solver and Generator





Set Bug forwarded-to-address to 'http://www.amule.org/abugs/view.php?id=1617'. Request was from Sandro Tosi <morph@debian.org> to control@bugs.debian.org. (Fri, 30 Jul 2010 13:57:07 GMT) (full text, mbox, link).


Information forwarded to debian-bugs-dist@lists.debian.org, Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>:
Bug#579788; Package amule. (Fri, 30 Jul 2010 13:57:11 GMT) (full text, mbox, link).


Acknowledgement sent to Sandro Tosi <morph@debian.org>:
Extra info received and forwarded to list. Copy sent to Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>. (Fri, 30 Jul 2010 13:57:11 GMT) (full text, mbox, link).


Message #47 received at 579788@bugs.debian.org (full text, mbox, reply):

From: Sandro Tosi <morph@debian.org>
To: Celejar <celejar@gmail.com>, 579788@bugs.debian.org
Subject: Re: [Pkg-amule-devel] Bug#579788: Bug#579788: Bug#579788: amule: share directory on external disk isn't persistent
Date: Fri, 30 Jul 2010 15:56:22 +0200
On Fri, May 7, 2010 at 21:54, Celejar <celejar@gmail.com> wrote:
> I don't know if you're allowed to change aMule's behavior in this
> regard, but if you can't, then I'm just noting here, FTR, that the echo
> command needs a newline before the new directory.

echo -e "\ndirectory" >> ...file...

Regards,
-- 
Sandro Tosi (aka morph, morpheus, matrixhasu)
My website: http://matrixhasu.altervista.org/
Me at Debian: http://wiki.debian.org/SandroTosi




Information forwarded to debian-bugs-dist@lists.debian.org, Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>:
Bug#579788; Package amule. (Thu, 05 Aug 2010 20:24:03 GMT) (full text, mbox, link).


Acknowledgement sent to Celejar <celejar@gmail.com>:
Extra info received and forwarded to list. Copy sent to Debian aMule Team <pkg-amule-devel@lists.alioth.debian.org>. (Thu, 05 Aug 2010 20:24:03 GMT) (full text, mbox, link).


Message #52 received at 579788@bugs.debian.org (full text, mbox, reply):

From: Celejar <celejar@gmail.com>
To: Sandro Tosi <morph@debian.org>
Cc: 579788@bugs.debian.org
Subject: Re: [Pkg-amule-devel] Bug#579788: Bug#579788: Bug#579788: amule: share directory on external disk isn't persistent
Date: Thu, 5 Aug 2010 16:20:55 -0400
On Fri, 30 Jul 2010 15:56:22 +0200
Sandro Tosi <morph@debian.org> wrote:

> On Fri, May 7, 2010 at 21:54, Celejar <celejar@gmail.com> wrote:
> > I don't know if you're allowed to change aMule's behavior in this
> > regard, but if you can't, then I'm just noting here, FTR, that the echo
> > command needs a newline before the new directory.
> 
> echo -e "\ndirectory" >> ...file...

Thanks.  Yes, I did figure out how to do that, but I just wanted to
note FTR that it's required, and that the echo command given in an
earlier email isn't quite correct.

Celejar
-- 
foffl.sourceforge.net - Feeds OFFLine, an offline RSS/Atom aggregator
mailmin.sourceforge.net - remote access via secure (OpenPGP) email
ssuds.sourceforge.net - A Simple Sudoku Solver and Generator





Reply sent to Sandro Tosi <morph@debian.org>:
You have taken responsibility. (Mon, 25 Apr 2011 16:45:03 GMT) (full text, mbox, link).


Notification sent to Celejar <celejar@gmail.com>:
Bug acknowledged by developer. (Mon, 25 Apr 2011 16:45:03 GMT) (full text, mbox, link).


Message #57 received at 579788-done@bugs.debian.org (full text, mbox, reply):

From: Sandro Tosi <morph@debian.org>
To: werner@vollstreckernet.de, 579788-done@bugs.debian.org
Cc: Celejar <celejar@gmail.com>
Subject: Re: [Pkg-amule-devel] Bug#579788: Bug#579788: amule: share directory on external disk isn't persistent
Date: Mon, 25 Apr 2011 18:40:05 +0200
tags 579788 upstream wontfix
thanks

On Sat, May 1, 2010 at 14:10, Werner Mahr <werner@vollstreckernet.de> wrote:
> Am Freitag 30 April 2010 schrieb Celejar:
>
>>  when I unplug the disk and later replug it, the directory is no
>>  longer present, and I have to once again manually enter the
>>  directory by navigating the file tree.
>
> Absolute correct. When you delete a file, it's being removed from shares
> on next access, same applies for deleted dirs and unplugged USB-Discs.
> Otherwise you'll get a file not found message on every access, which
> would be worse. We could keep the entry for the dir you mount the disc
> in the list and just ignore it, which would cause the list of shares to
> grow. In this case every deleted file or dir will stay in there, and
> startup would take longer and longer because they have to be checked all
> to see if they reappeared, and most likely they would be rehashed to see
> if they are still the same file.

Upstream agrees with what Werner said, so closing this report (since
it won't change and a workaround was provided).

Regards,
-- 
Sandro Tosi (aka morph, morpheus, matrixhasu)
My website: http://matrixhasu.altervista.org/
Me at Debian: http://wiki.debian.org/SandroTosi




Bug archived. Request was from Debbugs Internal Request <owner@bugs.debian.org> to internal_control@bugs.debian.org. (Tue, 24 May 2011 07:38:38 GMT) (full text, mbox, link).


Send a report that this bug log contains spam.


Debian bug tracking system administrator <owner@bugs.debian.org>. Last modified: Sun Jul 2 07:17:01 2023; Machine Name: bembo

Debian Bug tracking system

Debbugs is free software and licensed under the terms of the GNU Public License version 2. The current version can be obtained from https://bugs.debian.org/debbugs-source/.

Copyright © 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson, 2005-2017 Don Armstrong, and many other contributors.