|
Packit |
95306a |
# Copyright (c) 2015-2017 Sullivan Beck. All rights reserved.
|
|
Packit |
95306a |
# This program is free software; you can redistribute it and/or modify it
|
|
Packit |
95306a |
# under the same terms as Perl itself.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=pod
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=head1 NAME
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Date::Manip::History - Twenty years and still going strong
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=head1 TWENTY YEARS
|
|
Packit |
95306a |
|
|
Packit |
95306a |
I just realized (Dec 2015) that Date::Manip turned twenty years old
|
|
Packit |
95306a |
earlier this year, so I wanted to write some thoughts I have about
|
|
Packit |
95306a |
Date::Manip.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
The history of Date::Manip can be broken into several periods.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=over 4
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=item Birth of Date::Manip (1995-1996)
|
|
Packit |
95306a |
|
|
Packit |
95306a |
1995 was the year I really started using perl to automate some of
|
|
Packit |
95306a |
my common tasks. At the time, I was running programs using a number
|
|
Packit |
95306a |
of different batch systems that needed dates entered in a variety
|
|
Packit |
95306a |
of different formats. It was frustrating to remember what format for
|
|
Packit |
95306a |
what batch system, so I wrote some wrappers which would take a few
|
|
Packit |
95306a |
common formats that I wanted to use and would turn those dates into
|
|
Packit |
95306a |
whatever format the batch system needed.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
After a few different wrapper scripts (where I copied the date handling
|
|
Packit |
95306a |
code between the scripts), I gathered all of the date routines into
|
|
Packit |
95306a |
one package.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
This was the birth of Date::Manip.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
I kept it that way for about half a year. By that time, I was thoroughly
|
|
Packit |
95306a |
in love with perl and wanted to contribute.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
At the time, CPAN was just a fledgling site, but in October, I released
|
|
Packit |
95306a |
my first package. It wasn't really a module at that time... it was
|
|
Packit |
95306a |
crudely put together and extremely limited use. Even so, it got some
|
|
Packit |
95306a |
very positive initial feedback which spurred the early growth.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
There were several private versions followed by 4 public releases (4.0
|
|
Packit |
95306a |
through 4.3) during this period.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Soon, I had adopted many of the best practices of the day and converted
|
|
Packit |
95306a |
it to a full-blown module.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=item Active development (1996-2001)
|
|
Packit |
95306a |
|
|
Packit |
95306a |
The next 5 years were extremely active. Based on suggestions and requests,
|
|
Packit |
95306a |
functionality increased dramatically, and before long, Date::Manip was
|
|
Packit |
95306a |
considered the goto module for Date operations.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
During this period, a number of other modules came along that did a small
|
|
Packit |
95306a |
subset of the functions of Date::Manip (most of them significantly faster),
|
|
Packit |
95306a |
but none had the scope of Date::Manip.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
During this period, I recognized that the single biggest weakness was
|
|
Packit |
95306a |
the inability to correctly handle timezones and daylight saving time.
|
|
Packit |
95306a |
Towards the end of this period (2000 I believe), I began a project to
|
|
Packit |
95306a |
rewrite Date::Manip, but I didn't not have the time needed to really
|
|
Packit |
95306a |
carry it out at that time.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Another weakness was that Date::Manip grew in a random way. As ideas
|
|
Packit |
95306a |
and suggestions came, I added them. There was little planning or
|
|
Packit |
95306a |
forethought involved, and that led to it not having a consistent
|
|
Packit |
95306a |
API.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
1998 did see the addition of Recurrences. Although not an extremely
|
|
Packit |
95306a |
widely used piece of functionality, I regard this as the single most
|
|
Packit |
95306a |
important contribution I have ever made. I developed the notation for
|
|
Packit |
95306a |
specifying recurring events, and no other notation has ever come close
|
|
Packit |
95306a |
to matching it's power and flexibility.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
This period, starting with the first release in a full module form,
|
|
Packit |
95306a |
included 26 releases (from 5.00 to 5.40).
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=item Minimal maintenance (2001-2008)
|
|
Packit |
95306a |
|
|
Packit |
95306a |
During these years, I was able to devote time needed to maintain the
|
|
Packit |
95306a |
existing module, but not to do major development.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
As a result, the rewrite project remained incomplete (and in fact, it
|
|
Packit |
95306a |
was barely started).
|
|
Packit |
95306a |
|
|
Packit |
95306a |
During this time, due to the fact that no other module could handle
|
|
Packit |
95306a |
timezones correctly, DateTime arrived in 2003. It featured a nice
|
|
Packit |
95306a |
object-oriented interface, and handled timezones.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Over the next few years, it became the de facto standard for date
|
|
Packit |
95306a |
handling in perl.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
This period included only 8 releases (5.42 to 5.54).
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=item Rewrite (2009-2010)
|
|
Packit |
95306a |
|
|
Packit |
95306a |
In 2009, I decided it was time to fix the timezone problems in Date::Manip .
|
|
Packit |
95306a |
Some people might see this as a waste of time due to the fact that DateTime
|
|
Packit |
95306a |
existed, but I had several thoughts.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
First, many people continued to use Date::Manip. This was evident by
|
|
Packit |
95306a |
the number of emails I continued to receive.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Second, there were still things that Date::Manip did better than DateTime
|
|
Packit |
95306a |
including recurrences and parsing.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Third, I love my module, and didn't want to see it die. I'll continue to
|
|
Packit |
95306a |
use it, even if nobody else does.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
So, I set out to fix it. It turned out to be a complete rewrite, but in
|
|
Packit |
95306a |
the end, version 6 was released with full timezone handling, even better
|
|
Packit |
95306a |
parsing, and quite a few other features.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Date::Manip was once again very much alive.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
This period featured 13 releases (6.00 to 6.14) with an additional
|
|
Packit |
95306a |
2 maintenance releases of version 5.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=item Active maintenance (2010-present)
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Although primarily in maintenance mode (due to the fact
|
|
Packit |
95306a |
that Date::Manip does pretty much everything that it was designed to do),
|
|
Packit |
95306a |
active maintenance continues. There is also some development and
|
|
Packit |
95306a |
a large number of significant improvements have been made in this
|
|
Packit |
95306a |
period.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
I make regular releases to update the timezone information, fix bugs,
|
|
Packit |
95306a |
and add the occasional new features.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
For the foreseeable future, Date::Manip will remain active, and fully
|
|
Packit |
95306a |
capable of handling any common date operation.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Since 6.14, there have been 36 releases to date (6.20 to 6.59) which is
|
|
Packit |
95306a |
averaging about 5 releases per year.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=back
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=head1 ONE OF THE OLDEST
|
|
Packit |
95306a |
|
|
Packit |
95306a |
I was curious to see how many other modules are out there that have
|
|
Packit |
95306a |
survived as long as Date::Manip.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
The first public release of Date::Manip (though it was not a module
|
|
Packit |
95306a |
yet of course) was version 4.0 on 13-Aug-1995. The first public
|
|
Packit |
95306a |
release to CPAN was version 4.2 released on 23-Oct-1995.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
I got a list of all CPAN modules from the wayback machine for 2000
|
|
Packit |
95306a |
(the earliest version of the list that I could find). Then I checked
|
|
Packit |
95306a |
each of these authors on backpan to see which of these authors had
|
|
Packit |
95306a |
packages (.tar.gz or .tgz files) released prior to 23-Oct-1995.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
I found that at the time Date-Manip 4.2 was released there were
|
|
Packit |
95306a |
|
|
Packit |
95306a |
32 authors
|
|
Packit |
95306a |
70 packages
|
|
Packit |
95306a |
|
|
Packit |
95306a |
There are currently (Aug 2017) over 190,000 modules by over 13,000 authors.
|
|
Packit |
95306a |
So Date::Manip got involved in CPAN very early.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Next, I tried to determine which of those authors and packages are
|
|
Packit |
95306a |
still active. I'm not completely sure about some of the packages because
|
|
Packit |
95306a |
frequently, those old packages have changed maintainers, been renamed,
|
|
Packit |
95306a |
or been incorporated into other packages. So the number of active
|
|
Packit |
95306a |
packages is actually a lower limit.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
I found that:
|
|
Packit |
95306a |
|
|
Packit |
95306a |
13 authors are active today
|
|
Packit |
95306a |
21 of the packages are active today
|
|
Packit |
95306a |
7 of those packages are still maintained by the original author
|
|
Packit |
95306a |
|
|
Packit |
95306a |
An active author is one who has released something in the past 3 years.
|
|
Packit |
95306a |
An active module is one that has been updated in the past 3 years.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
I apologize if I have missed anyone.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
The 7 packages which are older than Date::Manip and are still actively
|
|
Packit |
95306a |
maintained by their original author (though they may have been renamed)
|
|
Packit |
95306a |
are:
|
|
Packit |
95306a |
|
|
Packit |
95306a |
ILYAZ MathPari 23-Jan-1995
|
|
Packit |
95306a |
ANDK Symdump 16-Aug-1995
|
|
Packit |
95306a |
PMQS Filter 28-Aug-1995
|
|
Packit |
95306a |
GAAS libwww-perl 16-Sep-1995
|
|
Packit |
95306a |
LDS GD 17-Sep-1995
|
|
Packit |
95306a |
MEWP sybperl 02-Oct-1995
|
|
Packit |
95306a |
TOMZO Quota 10-Oct-1995
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Congratulations to those authors who have been with perl since the
|
|
Packit |
95306a |
beginning. I'm proud to be in their company! And congratulations to
|
|
Packit |
95306a |
ILYAZ for having the oldest module in CPAN!
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Again, if I have missed anyone, please let me know.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=head1 SEE ALSO
|
|
Packit |
95306a |
|
|
Packit |
95306a |
L<Date::Manip> - main module documentation
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=head1 LICENSE
|
|
Packit |
95306a |
|
|
Packit |
95306a |
This script is free software; you can redistribute it and/or
|
|
Packit |
95306a |
modify it under the same terms as Perl itself.
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=head1 AUTHOR
|
|
Packit |
95306a |
|
|
Packit |
95306a |
Sullivan Beck (sbeck@cpan.org)
|
|
Packit |
95306a |
|
|
Packit |
95306a |
=cut
|