=head1 NAME

CREDITS - The many mod_perl contributors 

=head1 DESCRIPTION

While Doug MacEachern is behind the majority of mod_perl's design,
code and documentation, he and mod_perl never would have made it this
far without the help from everyone in the mod_perl community.  His
heartfelt thanks goes out to all of you! 

There are thousands of people who have contributed to what mod_perl is
today.  This file is here to recognize the tremendous efforts of the
major contributors to the mod_perl effort.  

This file is generated by a Perl script which sorts by name.

=head1 MAJOR CONTRIBUTORS

=over 4

=item Andreas Koenig (andreas.koenig@franz.ww.tu-berlin.de)

For *lots* of bug spotting, fixing and patching since the early days.
Andreas introduced the Apache::Registry that we all know and love.
He put a great deal of time and effort into CGI.pm overhaul efforts
(aka CGI::XA & CGI::Switch).  
Various contributions to the Apache/Perl API.
PAUSE efforts beyond the call of "duty".
Apache::Stage, Apache::GzipChain and Apache::UploadSrv modules on CPAN.
Andreas was the first to run mod_perl on a production site, the Perl
Authors Upload Server, aka PAUSE.

=item Andrew Ford (A.Ford@ford-mason.co.uk)

Andrew has made contributions to the Apache::FakeRequest module and is
the author of the mod_perl refcard.

=item Ask Bjorn Hansen (ask@netcetera.dk) 

Author of the Apache::DBILogger and Apache::UserTrack modules,
mod_perl_handlers.pod along with plenty of help testing cvs snapshots,
documentation improvements, Apache::StatINC hacking and assisting with
the perl.apache.org site. 

=item Brian Behlendorf (brian@apache.org)

Brian provides the bandwidth for perl.apache.org along with the
mailing list and cvs repository.

=item Brian Mosley (ix@maz.org)

Brian added Solaris support to Apache::SizeLimit and maintains
Apache::SizeLimit in the distribution.  He is always one of the first
to try out new features, before they are even documented!

=item Doug Bagley (doug@dejanews.com)

Doug Bagley has pinpointed some of the nastiest mod_perl bugs while
claiming to know nothing about xs.  He's also made improvements to the
Apache::SIG module along with writing the valuable Apache::SizeLimit
module.  

=item Edmund Mergl (E.Mergl@bawue.de) 

Edmund revolutionized database connectivity with his Apache::DBI
module for persistent connections via DBI, providing a tremendous
performance boost for database intensive apps.  He's also written the
popular Apache::AuthenDBI and Apache::AuthzDBI packages for
authentication and authorizing against databases via DBI.

=item Eric Cholet (cholet@logilune.com)

Author of Apache::EmbperlChain and Apache::RefererBlock.
Involved with many heroic debugging sessions.

=item Eric Bartley (bartley@pdn.cc.purdue.edu)

Eric had a big hand in implementing and testing method handlers.
He also contributed to some of the Apache/Perl API, along with
making sense of some AIX mysteries for us.
And, his Apache::AuthCookie module is an inspiration to us all.

=item Frank Cringle (fdc@cliwe.ping.de)

Frank is the author and maintainer of the mod_perl FAQ.

=item Gerald Richter (richter@ecos.de)

Gerald has helped us with various bug spotting and fixing over the
years.  His HTML::Embperl module, specially designed to run under
mod_perl, has saved many lives.

=item Gisle Aas (aas@sn.no)

Gisle wrote an early "proof-of-concept" mod_perl.c and perl_glue.xs
March 25, 1996 to be exact.  While next to none of that code is
present in the current mod_perl source, as the embedded model and
XS <-> Apache API interface were changed, it was an important
insipirational kick start to what mod_perl has become today.    

Gisle has also contributed to mod_perl's Apache::Constants module,
along with API enhancements and documentation.

=item Jan Pazdziora (adelton@fi.muni.cz)

Jan is the author of the Apache-OutputChain package.

=item Jason Bodnar (jason@cimedia.com)

Jason's mod_perl hacking has inspired a good chunk of the Apache/Perl
API, some of which you'll see in his Apache::CustomDBILogger and
Apache::AuthenCache modules.

=item Jeffrey Baker (jeff@godzilla.tamu.edu)

Maintainer of the mod_perl NT binary distribution and author of the
Apache::Session module.

=item John D. Groenveld (jdg117@elvis.arl.psu.edu)

John contributed the Apache::DBILogin, Apache::AuthenURL and
Apache::PHLogin modules along with proving Oracle
tips and tricks over the years.

=item Joshua Chamas (chamas@alumni.stanford.org)

Author of the Apache::ASP module.

=item Ken Williams (ken@forum.swarthmore.edu)

Author of the Apache::Taco, Apache::SSI and Apache::Filter modules.

=item Lincoln Stein (lstein@cshl.org)

Everybody knows Lincoln gave us the must-have CGI.pm module, he's put
forth considerable effort porting and optimizing it for mod_perl.
Lincoln also wrote the original Apache::Request module, a CGI.pm-like
module on top of the Apache API.  Lincoln's code and prose in the
upcoming mod_perl book is a major step towards world peace.

=item Mark Imbriaco (perlhacker@earthlink.net)

For setting up the original mod_perl mail list and administration of
that list for two years.
Mark was also the first person besides Doug to write an Apache::* module,
the first version of Apache::ePerl.
He was also the first person to build and run mod_perl under Windows 95!

=item Michael Parker (parker@austx.tandem.com)

Michael gave us Apache::AuthenSMB.

=item Mike Fletcher (fletch@phydeaux.org)

Fletch gave us Apache::Mmap.

=item Patrick Kane (modus@pr.es.to)

Patrick wrote the original mod_perl FAQ.

=item Peter Tillemans (pti@pandora.be)

Peter helped bring mod_perl upto win32 speed with various patches
including support for 'make test'.  He also maintains the Windows95
binary distribution of mod_perl.

=item Ralf S. Engelschall (rse@engelschall.com)

Ralf, aka "Dr. Cosmetics", has greatly improved the mod_perl
configure/build/install process by implementing APACI, DSO and APXS
support, along with various documentation enhancements.  He has also
written the Apache::ePerl module.

=item Rob Hartill (robh@imdb.com)

Rob was the second to run mod_perl in a production enviroment, and
perhaps the best known mod_perl site, the Internet Movie DataBase.
He's also provide various bug fixes, enhancements and mail list support
since the early days of mod_perl.
Always one step ahead testing mod_perl against Apache cvs snapshots.
It was Rob's kicking that made the mod_perl CVS tree come to be.

=item Salvador Ortiz Garcia (sortiz@cfe.gob.mx)

Salvador has helped bang out bugs and traps with sfio enabled
mod_perls, along with various bug spotting and stopping since the
early days.  He has also contributed to the Apache/Perl API.

=item Stas Bekman (stas@stason.org)

Stas' "Mod Perl Developer's Mini Guide" has saved many lives.
He has also contributed a great deal to the mod_perl documentation and
mod_perl site.

=item Vivek Khera

Vivek has saved many lives with his mod_perl_tuning.pod document.


=back


=head1 MODULE AUTHORS

These are the authors of the "third-party" mod_perl modules available
from the CPAN.

=over 4

=item Charles C. Fu (ccwf@bacchus.com)

Author of Apache::Gateway.

=item Chris Thorman (chris@thorman.com)

Author of Apache::PrettyText.

=item Clayton Donley (donley@wwa.com)

Author of Apache::TransLDAP and Apache::AuthLDAP.

=item Daniel (daniel-authenradius@electricrain.com)

Author of Apache::AuthenRadius.

=item Demetrios E. Paneras (dep@media.mit.edu)

Author of Apache::AuthenPasswd, Apache::AuthzPasswd, Apache::AuthenNIS
and Apache::AuthzNIS.  

=item Don Schwarz (dons@xnet.com)

Author of Apache::Throttle.

=item Ian Kluft (ikluft@cisco.com)

Author of Apache::Servlet.

=item Jeffrey Hulten (jeffh@premier1.net)

Author of Apache::AuthenPasswdSrv.

=item Jim Woodgate (woody@bga.com)

Author of Apache::Album.

=item Jochen Wiedmann (joe@ispsoft.de)

Author of Apache::EP.

=item Jonathan Swartz (swartz@transbay.net)

Author of HTML::Mason.

=item Malcolm Beattie (mbeattie@sable.ox.ac.uk)

Author of Apache::AuthenIMAP.

=item Mark A. Downing (mdowning@rdatasys.com)

Author of Apache::Sybase::CTlib.

=item Maurice Aubrey (maurice@hevanet.com)

Author of Apache::Traffic.

=item Michael Smith (mjs@iii.co.uk)

Author of Apache::ProxyPass and Apache::RedirectDBI.

=item Neil Jensen (njensen@habaneros.com)

Author of Apache::Mysql.

=item Peter G. Marshall (mitd@mitd.com)

Author of Apache::TimedRedirect.

=item Randy Kobes (randy@theory.uwinnipeg.ca)

Author of Apache::RandomLocation.
the existence of a user in one or more database tables.

=item Simon Matthews (sam@peritas.com)

Author of Apache::Layer.

=item Tom Hughes (tom@compton.demon.co.uk)

Author of Apache::TempFile.

=item Valerie Delane (valerie@savina.com)

Author of Apache::AuthenNISplus.


=back

=head1 The Apache and Perl communities

If there was no Apache, there would be no mod_perl.

If there was no Perl, there would be no mod_perl.

We owe a great deal of thanks to The Apache Group, Larry Wall and the
perl5-porters, along with the communities that support them both.

=head1 OTHER CONTRIBUTORS

There are B<many> other people who have contributed a great deal to
mod_perl in one way or another, this list is derived from the Changes
file, activity on the modperl@perl.apache.org list including support,
suggestions and new ideas, along with help through private mails or
other means.   

This list is most likely incomplete.
My apologies if that is the case, please send me an email if you are
left out and your contribution will be recognized!

If you do not feel you've made a contribution, remember your help is
always welcome and appreciated.  You should consider yourself a
contributor to the mod_perl effort even if you are simply using mod_perl! 

Adam Laurie, Alan Beale, Alexander Demenshin, Andrea Borgia, Ben Laurie,
Ben Reser, Ben Sugars, Bowen Dwelle, Brian Millett, Bruce Hoylman, Chip
Salzenburg, Chris Dean, Christopher Thompson, Dan Peterson, David Hodson,
David Landgren, Dean Gaudet, Elizabeth Mattijsen, Eric Eisenhart, Eric
James Negaard, Evert-Jan Couperus, Gary Shea, Gunther Birznieks, Gurusamy
Sarathy, Iosif Fettich, James Cooper, Jarkko Hietaniemi, Jeff Hallgren,
Jeff Rowe, Jens Heunemann, Jimmy Oh, Joel Wagner, John Detloff, Jon
Drukman, Jon Orwant, Joonsuk Bae, Liam Howlett, Lupe Christoph, Marc
Slemko, Mark Constable, Mark Mills, Mark-Jason Dominus, Michael Alan
Dorman, Michael Peppler, Michael Sanders, Michael Shields, Michael Turner,
Mike Pheasant, Mike Stok, Mike Wertheim, Milan Votava, Nathan Torkington,
Owen Scott Medd, Paul Phillips, Paul Sutton, Peter Levart, Randal Schwartz,
Richard Dice, Robert Nice, Robert Tau, Ron Hawkins, Ryan Whelan, Steve
Farrell, Steve Farrell, Steve Nielsen, Sven Verdoolaege, Ted Corning, Tim
Bunce, Todd Eigenschink, Tom Hukins, Tom Mornini, Ulrich Pfeifer

=head1 REVISION

$Revision$ $Date$
