The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Copyright (c) 2015-2016 Sullivan Beck. All rights reserved.
# This program is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.

=pod

=head1 NAME

Date::Manip::History - Twenty years and still going strong

=head1 TWENTY YEARS

I just realized (Dec 2015) that Date::Manip turned twenty years old
earlier this year, so I wanted to write some thoughts I have about
Date::Manip.

The history of Date::Manip can be broken into several periods.

=over 4

=item Birth of Date::Manip (1995-1996)

1995 was the year I really started using perl to automate some of
my common tasks.  At the time, I was running programs using a number
of different batch systems that needed dates entered in a variety
of different formats.  It was frustrating to remember what format for
what batch system, so I wrote some wrappers which would take a few
common formats that I wanted to use and would turn those dates into
whatever format the batch system needed.

This was the birth of Date::Manip.

After a few different wrapper scripts (where I copied the date handling
code between the scripts), I gathered all of the date routines into
one package.

I kept it that way for about half a year.  By that time, I was thoroughly
in love with perl and wanted to contribute.

At the time, CPAN was just a fledgling site, but in October, I released
my first package.  It wasn't really a module at that time... it was
crudely put together and extremely limited use.  Even so, it got some
very positive initial feedback which spurred the early growth.

Soon, I had adopted many of the best practices of the day and converted
it to a full-blown module.

=item Active development (1996-2001)

The next 5 years were extremely active.  Based on suggestions and requests,
functionality increased dramatically, and before long, Date::Manip was
considered the goto module for Date operations.

During this period, a number of other modules came along that did a small
subset of the functions of Date::Manip (most of them significantly faster),
but none had the scope of Date::Manip.

During this period, I recognized that the single biggest weakness was
the inability to correctly handle timezones and daylight saving time.
Towards the end of this period (2000 I believe), I began a project to
rewrite Date::Manip, but I didn't not have the time needed to really
carry it out at that time.

Another weakness was that Date::Manip grew in a random way.  As ideas
and suggestions came, I added them.  There was little planning or
forethought involved, and that led to it not having a consistent
API.

1998 did see the addition of Recurrences.  Although not an extremely
widely used piece of functionality, I regard this as the single most
important contribution I have ever made.  I developed the notation for
specifying recurring events, and no other notation has ever come close
to matching it's power and flexibility.

=item Minimal maintenance (2001-2008)

During these years, I was able to devote time needed to maintain the
existing module, but not to do major development.

As a result, the rewrite project remained incomplete (and in fact, it
was barely started).

During this time, due to the fact that no other module could handle
timezones correctly, DateTime arrived in 2003.  It featured a nice
object-oriented interface, and handled timezones.

Although it took a while, over the next few years, it became the
de facto standard for date handling in perl.

=item Rewrite (2009)

In 2009, I decided it was time to rewrite Date::Manip .  Some people
might see this as a waste of time due to the fact that DateTime existed,
but I had several thoughts.

First, many people continued to use Date::Manip.  This was evident by
the number of emails I continued to receive.

Second, there were still things that Date::Manip did better than DateTime
including recurrences and parsing.

Third, I love my module, and didn't want to see it die.  I'll continue to
use it, even if nobody else does.

So, I set out to fix it.  It turned out to be a complete rewrite, but in
the end, version 6 was released with full timezone handling, even better
parsing, and quite a few other features.

Date::Manip was once again very much alive.

=item Active maintenance (2010-2015)

Although active development is fairly limited, primarily due to the fact
that Date::Manip does pretty much everything that it was designed to do,
maintenance is very active at this point.

I make regular releases to update the timezone information, fix bugs,
and add the occasional new features.

For the foreseeable future, Date::Manip will remain active, and fully
capable of handling any common date operation.

=back

=head1 ONE OF THE OLDEST

I was curious to see how many other modules are out there that have
survived as long as Date::Manip.

The first public release of Date::Manip was version 4.2 released on
23-Oct-1995.

I got a list of all CPAN modules from the wayback machine for 2000
(the earliest version of the list that I could find).  Then I checked
each of these authors on backpan to see which of these authors had
packages (.tar.gz or .tgz files) released prior to 23-Oct-1995.

I found that at the time Date-Manip 4.2 was released there were

   32 authors
   70 packages

So Date::Manip got involved in CPAN very early.

Next, I tried to determine which of those authors and packages were
still active.  I'm not completely sure about the packages because
frequently, those old packages have changed maintainers, been renamed,
or been incorporated into other packages.  So the number of active
packages is actually a lower limit.

I found that:

   13 authors are active today
   21 of the packages are active today
   7 of those packages are still maintained by the original author

Active means that a new release in the past 3 years.

I apologize if I have missed anyone.

Just for information, the 7 authors and packages that are older than
Date::Manip (though they may have been renamed) are:

   ANDK   Symdump
   GAAS   libwww-perl
   ILYAZ  MathPari
   LDS    GD
   MEWP   sybperl
   PMQS   Filter
   TOMZO  Quota

Congratulations to those authors who have been with perl since the
beginning.

Again, if I have missed anyone, please let me know.

=head1 SEE ALSO

L<Date::Manip>        - main module documentation

=head1 LICENSE

This script is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

=head1 AUTHOR

Sullivan Beck (sbeck@cpan.org)

=cut