10.122		2021-11-10	T. R. Wyant
2    Add CONTRIBUTING file
3
4    Document demise of Willmann-Bell and the transfer of their assets to
5    Sky and Telescope.
6
70.121		2021-08-08	T. R. Wyant
8    Fix implementation of Borkowski's algorithm for converting
9    geocentric to geodetic coordinates.  An edge case in my
10    implementation resulted in a divide-by-zero error at geocentric
11    latitude 90 degrees.  Thanks to Jason Venner for reporting this
12    issue.
13
14    Address divide-by-zero in azel() velocity calculation when range is
15    0.  Because some effort has been made to provide a position result
16    in this case (rather than an error), I decided that since the
17    velocity is undefined in this case I would just not return it.
18    Thanks to Jason Venner for reporting this issue.
19
20    Correct generation of 'provides' metadata.  Thanks to Favio Poletti
21    for blogging
22    https://github.polettix.it/ETOOBUSY/2021/06/15/the-real-pause-workaround/,
23    and ultimately to Joel Berger for the pointer to
24    https://metacpan.org/pod/CPAN::Meta::Spec#no_index
25
260.120		2021-05-20	T. R. Wyant
27    Use Heavens-Above intrinsic magnitude for Tianhe and the ISS.
28
29    Tweak Math Doctors acknowledgement for haversine article recovery.
30
310.119		2021-04-16	T. R. Wyant
32    Update haversine link to point to "The Math Doctors" web site
33
34    Fix clone(), and test to ensure it stays fixed.
35
360.118		2021-04-01	T. R. Wyant
37    Add rt.cpan.org back to bug reporting methods. Long live RT!
38
39    Refactor authortest into three, to eliminate the need for stub files
40    to test without optional modules.
41
42    Remove references to the NASA Human Space Flight web site, since it
43    has been taken down.
44
45    Fix broken POD links. Most were in script/satpass, but the "Ask Dr.
46    Math" link on haversines is also gone, because the teachers'
47    association that took it over from Drexel has decided that their
48    function is to restrict knowledge, not disiseminate it.
49
50    Get prerequisites up to snuff, and add xt/author/prereq.t to ensure
51    they stay that way.
52
530.117		2021-01-01	T. R. Wyant
54    Fix bug in Astro::Coord::ECI::Sun next_quarter(). This bug was
55    introduced in version 0.089 (released 2018-02-02) when I replaced an
56    iterative calculation with Meeus' closed-form algorithm. The bug was
57    in my interface to Meeus' algorithm, and manifested only between the
58    last quarter and the end of the year. It did not manifest if you set
59    Sun attribute 'iterate_for_quarters', which caused the old algorithm
60    to be used.
61
62    Use GitHub as bug tracker. R.I.P. rt.cpan.org.
63
64    Add Travis CI testing.
65
66    Remove Tiangong 2 from canned magnitude table
67
680.116		2020-09-10	T. R. Wyant
69    Remove all mention of subs nutation_*, obliquity, and friends, which
70    were defined in Astro::Coord::ECI::Utils. These were replaced by
71    methods.
72
730.115		2020-08-19	T. R. Wyant
74    Remove prototypes from testing subroutines defined in t/*.t and
75    inc/My/Module/Test/*.pm
76
77    Update canned satellite magnitude table.
78
790.114		2020-06-25	T. R. Wyant
80    Document undef as argument to equation_of_time()
81
82    Update canned magnitude table per Kelso.
83
84    Correct heliocentric_ecliptic*(), I hope. I don't have worked
85    examples, but at least the current computation is sane in that the
86    heliocentric coordinates of the Earth are the complement of the
87    geocentric coordinates of the Sun.
88
890.113		2020-03-07	T. R. Wyant
90    Subroutines equation_of_time(), nutation_in_longitude(),
91    nutation_in_obliquity(), and obliquity() are now fatal. They were
92    deprecated in favor of Astro::Coord::ECI methods equation_of_time(),
93    nutation(), and obliquity(). The reason for the change was to allow
94    classes access to higher-precision versions of these calculations if
95    desired (e.g. the Astro::Coord::ECI::VSOP87D::* classes).
96
970.112		2020-01-26	T. R. Wyant
98    Add Astro::Coord::ECI::Utils subroutines greg_time_gm() and
99    greg_time_local(), which convert date and time into epoch time.
100    Unlike time_gm() and time_local() (which interpret the year however
101    Time::Local timegm() and timelocal() do), the new routines always
102    interpret the year as Gregorian. The older routines are now
103    discouraged, and have been eliminated in this package's code.
104
1050.111		2020-01-11	T. R. Wyant
106    Fix Y2020 bug.
107
108    The problem here was Time::Local's weird handling of years less 100,
109    which is inconsistent with the gmtime() and localtime() built-ins, to
110    wit: years less than 100 are considered to be within 50 years of the
111    current year. As of January 1 2020, 70 became no longer 1970 (the usual
112    epoch year) but 2070.
113
114    As far as I can determine the only impact was in a test that contained
115    an adjustment for systems that might have a non-Unix epoch.
116
117    The solution was to specify a four-digit year in the test, and to use
118    Time::Local's timegm_modern() and timelocal_modern() where available.
119
120    Thanks to Chris Williams (BINGOS), who uncovered this in one of his CPAN
121    tester systems.
122
123    CPAN TESTERS ROCK!
124
125    Suppress 'Ambiguous use of -PIOVER2' under 5.10.1. Thanks to Chris
126    Williams (BINGOS) for finding this.
127
128    Eliminate redirections in POD URL links
129
1300.110		2019-10-04	T. R. Wyant
131    Validate horizon and almanac_horizon. This is pretty much the same
132    situation as twilight -- they were completely unvalidated, but are
133    now restricted to the range - PI/2 to PI/2 radians, inclusive.
134
1350.109		2019-09-08	T. R. Wyant
136    Further deprecate nutation and obliquity subroutines in favor of the
137    same-named methods. Subroutine calls now always result in a warning.
138    In six months they will be fatal.
139
1400.108		2019-08-29	T. R. Wyant
141    Validate 'twilight' attribute. It must be between -PI/2 and PI/2
142    inclusive. Thanks to Kay Kilpatrick for bringing this to my
143    attention.
144
145    Correct eval() check in load_module().
146
1470.107		2019-08-03	T. R. Wyant
148    Fix broken POD links and add a test to ensure they stay fixed.
149
150    Add low-level subroutine position_angle() to
151    Astro::Coord::ECI::Utils.
152
153    Allow station argument to equatorial_apparent() method.
154
1550.106		2019-05-13	T. R. Wyant
156    Added some canned satellite magnitudes, mostly in the range of 4.5
157    to 5 or so.
158
1590.105		2019-03-19	T. R. Wyant
160    Require at least Scalar::Util 1.22. With profound thanks to Nigel
161    Horne for testing on versions of Perl old enough to expose the need
162    for this.
163
1640.104		2019-03-09	T. R. Wyant
165    Correct error message definition in sgp4r().
166
167    Have the null model return its invocant.
168
169    Nutation and obquity subroutines now warn on first use. These (and
170    equation_of_time(), which uses them) are deprecated in favor of the
171    relevant methods. The motivation was to allow higher-accuracy
172    implementations where appropriate (e.g.
173    Astro::Coord::ECI::VSOP87D::*).
174
175    Try to kill undef errs in 'brightest' calc.
176
177    Correct version in Southern-hemisphere and ::Utils deprecation
178    notices.
179
180    Add eg/maidenhead
181
182    Make ::TLE::Iridium optional in script/satpass
183
1840.103		2018-11-03	T. R. Wyant
185    RT 127488: Load default Sun class before use
186
187    This actually manifested in RT 127463 against SVG-Calendar. The smallest
188    self-contained piece of code to tickle this is
189      use Astro::Coord::ECI;
190      Astro::Coord::ECI->new()->get( 'sun' );
191
192    The bug was introduced (or maybe just exacerbated) in version 0.100_01,
193    which was where I added support for alternate Sun classes. In the course
194    of this, 'use Astro::Coord::ECI::Sun' was dropped from
195    Astro::Coord::ECI::Moon and Astro::Coord::ECI::Star. The former is
196    involved in the SVG-Calendar problem.
197
198    Thanks to Slaven Rezic for spotting this in his smoker, submitting the
199    original RT ticket, and adding me to it with the note that it seemed
200    only to be a problem with recent versions of Astro-satpass.
201
2020.102		2018-09-24	T. R. Wyant
203    Almanac descriptions are now sensitive to object name. That is to
204    say, if for some reason you designate a different name for the Sun,
205    almanac descriptions will reflect that.
206
207    The mutator for the 'sun' attribute now requires the new value to be
208    a member of $self->SUN_CLASS(), rather than SUN_CLASS. This way a
209    subclass can place more stringent restrictions on it.
210
211    Also it turns out that the 'sun' attribute was never documented. So it
212    is now.
213
2140.101		2018-09-07	T. R. Wyant
215    Move nutation, obliquity, equation_of_time to Astro::Coord::ECI.
216    They become methods rather than subroutines so that they can be
217    overridden when higher accuracy is needed.
218
219    Install @CARP_NOT in all modules.
220
221    Have Moon and Star use correct Sun object for phase, aberration
222
223    Have the Sun's 'sun' attribute be itself. Access to it returns the
224    invocant, and mutations are ignored.
225
226    Add Utils functions rad2dms() and rad2hms()
227
228    In the script/satpass script, update all contained objects when the
229    'illum' or 'sun' settings are changed.
230
2310.100		2018-07-22	T. R. Wyant
232    Add non-TLE attributes as optional hash reference to parse().
233    Actually, this already worked for traditional TLEs, it just needed
234    to be documented. But it needed to be added to the JSON code.
235
236    Fix $eci->set( sun => ... ). The mutator was not in fact setting the
237    new value of the attribute. Included in this is support for changing
238    the static (i.e. default) value of the attribute.
239
240    Make singleton Sun & Moon per-class. This is so that you always get
241    back the same class you requested if there is more than one class
242    that can represent each body (say, at different accuracies).
243
244    Pull out Astro::Coord::ECI::TLE::Iridium as separate distribution.
245    The canned statuses went with it.
246
2470.099		2018-06-29	T. R. Wyant
248    Canned status update:
249
250    - Iridium 41 failed
251    - Iridium 65 spare
252    - Iridium 67 failed
253    - Iridium 75 failed
254    - Iridium 81 failed
255
256    Move iridium status setup to Astro::Coord::ECI::TLE::Iridium. This
257    is in preparation for spinning off that module into its own package.
258
2590.098		2018-06-16	T. R. Wyant
260    Canned status update:
261
262    - Iridium 18 failed
263    - Iridium 67 spare
264    - Iridium 68 decayed
265    - Iridium 75 spare
266
2670.097		2018-06-04	T. R. Wyant
268    Large canned status update:
269
270    - Iridium 7 failed
271    - Iridium 11 spare
272    - Iridium 15 spare
273    - Iridium 18 spare
274    - Iridium 21 decayed
275    - Iridium 31 spare
276    - Iridium 37 decayed
277    - Iridium 39 failed
278    - Iridium 46 failed
279    - Iridium 47 spare
280    - Iridium 55 spare
281    - Iridium 58 spare
282    - Iridium 61 spare
283    - Iridium 62 spare
284    - Iridium 68 failed
285    - Iridium 81 spare
286    - Iridium 90 failed
287    - Iridium 96 failed
288    - Iridium 97 spare
289
290Decays are from Space Track. Other status changes are from Dr. T. S.
291Kelso's Celestrak web site. "Spare" conflates several Celestrak
292statuses; the above spares are typically "[B]" (backup) or "[P]" (partly
293operational).
294
2950.096		2018-05-23	T. R. Wyant
296    Link to metacpan.org rather than search.cpan.org.
297
298    Canned status updates:
299    - Decay of Iridium 25
300    - Decay of Iridium 72
301    - Iridium 64 now spare per Kelso
302    - Iridium 66 now spare per Kelso
303    - Iridium 68 now spare per Kelso
304    - Iridium 71 now spare per Kelso
305
3060.095		2018-05-08	T. R. Wyant
307    Iridium 13 decayed. Canned status update.
308
3090.094		2018-04-27	T. R. Wyant
310    Kelso drops Tiangong 1 from visual.txt. This results in a change to
311    the canned magnitude table.
312
313    Update canned Iridium status table for:
314    - Decay of Iridium 19 and 94;
315    - Mark Iridiums 29, 33, and 72 spare per Kelso.
316
317    Prefer /[0-9]/ to /\d/ for matching digits. The latter matches
318    non-ASCII digits as well as ASCII ones, but the former is what I
319    want, because usually once there is a match numeric conversion
320    happens.
321
3220.093		2018-04-05	T. R. Wyant
323    Iridium 23 decayed March 28 2018. This necessitates updating all the
324    canned Iridium status tables.
325
326    Kelso marks Iridiums 12, 13 & 76 partly operational. This translates
327    to "SPARE" in the Iridium status table.
328
3290.091		2018-03-10	T. R. Wyant
330    Kelso marks Iridium 94 as partly operational. Updated canned status
331    to call it spare.
332
333    Use manifest constants for reference types. That is, instead of
334    'ARRAY', use ARRAY_REF, defined using 'use constant', and so on.
335
3360.090		2018-02-22	T. R. Wyant
337   Update canned Iridium status table for decay of Iridiums 3, 43 and
338   49, and making 3, 23, and 46 spare per Kelso.
339
3400.089		2018-02-02	T. R. Wyant
341    Kelso marks Iridiums 3, 37, 49 as "P" ("partly operational"). This
342    is "spare" in my classification. Sladen calls 3 failed, but I'm
343    using the Kelso data in the canned status table in
344    Astro::Coord::ECI::TLE.
345
346    Fix problem with Astro::Coord::ECI::Sun when Time::y2038 used.
347
348    New algorithm for equinoxes and solstices. The new algorithm is from
349    Jean Meeus' "Astronomical Algorithms." 2nd edition, chapter 27
350    ("Equinoxes and Solstices"), and should be more accurate, at least
351    for reasonably current times.
352
353    If you want the old iterative algorithm back, you can set new
354    attribute 'iterate_for_quarters' to a true value.
355
356    Correct typo in calculation of Sun's postion. The correction
357    produced no change in the equinoxes and solstices calculated by
358    iteration.
359
360    Add eg/usno-seasons. This displays equinoxes and solstices for a
361    given year, both as computed by Astro::Coord::ECI::Sun and as
362    downloaded from the United States Naval Observatory.
363
3640.088		2018-01-16	T. R. Wyant
365    Iridium 34 decayed January 8 2017. So marked in canned status.
366
3670.087		2017-12-30	T. R. Wyant
368    Iridium 6 decayed December 23 2017. Update canned status for this.
369
370    Kelso marks Iridium 34 tumbling, 96 partial December 22 2017. Update
371    canned status for this.
372
373    Kelso marks Iridiums 6, 19 & 22 as tumbling. Canned status table
374    updated to reflect this.
375
3760.086		2017-12-06	T. R. Wyant
377    Mark Iridium 8 as decayed in canned status table.
378
3790.085		2017-11-24	T. R. Wyant
380    Kelso says Iridiums 5, 8, and 51 are tumbling. Canned status updated
381    to reflect this.
382
3830.084		2017-10-12	T. R. Wyant
384
385    Add support for decayed Iridium satellites:
386
387    * Carry them in canned status table
388
389    * Have can_flare( 'all' ) return true regardless of satellite
390      status.
391
392    All this was triggered by Kelso's recognition that Iridium 77 had
393    decayed.
394
3950.083		2017-09-13	T. R. Wyant
396
397    Add -decayed to eg/visual.
398
399    This eliminates decayed bodies. I decided not to remove these from
400    the magnitude table because of historical interest.
401
402    Kelso removes 38253 from visual.txt. Decayed 2017-08-18.
403
404    Kelso marks 25471 Iridium 77 failed
405
406    Kelso marks 24949 Iridium 30 failed
407
408    Kelso adds 33411 to visual.txt.
409
410    Kelso adds 11251 METEOR 1-29 to visual.txt
411
412    Use qsmag instead of mcnames to suppliment magnitudes in the canned
413    magnitude table.  As of July 24 2017 mcnames appeared to be
414    double-compressed and corrupt besides. Both are maintained by Mike
415    McCants, but the former is input to his QuickSat program and so
416    likely to be less fragile. I hope. The mcnames file was eventually
417    corrected, but I am sticking with qsmag for now.
418
419    Kelso reports decay of Iridium 74.
420
4210.082		2017-06-14	T. R. Wyant
422    Kelso reports Iridium 79 out of service.
423
4240.081		2017-05-26	T. R. Wyant
425    Update canned magnitude table.
426
427    Deprecate McCants' status. His web page notes itself as no longer
428    maintained.
429
430    Document impending changes in Iridium support.
431
432    Kelso reports Iridiums 43 & 82 tumbling. Canned status changed in
433    Astro::Coord::ECI::TLE to reflect this.
434
4350.079		2017-04-26	T. R. Wyant
436    Move satpass script from bin/ to script/
437
438    Mark OID 25041 (Iridium 40) tumbling, and 25042 (Iridium 41) spare
439    per Kelso. The latter appears to have actually been declared spare
440    in July 2016, but somehow I missed updating the canned status table.
441
442    Kelso added OID 16719 (COSMOS 1743) to magnitudes
443
4440.078		2017-02-10	T. R. Wyant
445  Fix L<> links, and things that should have been L<> but were not.
446    Thanks to Ben Bullock for the pull request.
447
448  Add 'provides' data to ExtUtils::MakeMaker output
449
450  Add 'base' to dependencies.
451
4520.077		2016-12-03	T. R. Wyant
453  Remove leading 0 from Space Track 3le names
454
455  Handle year incompatibility between Time::Local and Time::y2038
456    This is the same problem as RT #118861 on Astro-App-Satpass2, and I
457    applied the same solution. As a result of this,
458    Astro::App::Satpass2::Utils now exports time_gm() and time_local().
459
4600.076		2016-11-06	T. R. Wyant
461  Clean up Changes file. Version 0.075 had raw Git log for changes.
462    Oops.
463
4640.075		2016-11-06	T. R. Wyant
465  Add estimated magnitude for Tiangong 2.
466    Since I believe (per Wikipedia) that it is the same size as Tiangong 1,
467    I am estimating the same absolute magnitude (4.0).
468
4690.074		2016-09-04	T. R. Wyant
470
471  Add HISTORICAL CALCULATIONS section to OVERVIEW.
472
473  Correct almanac_hash() methods when station is defaulted to the body's
474    station attribute rather than explicitly passed.
475
476  Add eg/solstice
477
4780.073		2016-08-07	T. R. Wyant
479  Update Celestrak visual.txt date. No data change.
480
481  Update canned Iridium statuses and magnitudes in
482    Astro::Coord::ECI::TLE.
483
484  Tweak satpass script geocoding heuristics.
485
486  Tweak eg/visual for Perl 5.6.2.
487
4880.072		2016-07-02	T. R. Wyant
489  Set canned status for Iridium 57 (OID 25273) failed per Kelso.
490
4910.071		2016-01-06	T. R. Wyant
492  Add GitHub repository to metadata.
493
494  Change satpass script to geocode using OSM.
495    Also fix apparent bit rot in show command.
496
497  Correct Astro::Coord::ECI->next_elevation(). Elevation was being
498    calculated inconsistently, resulting in incorrect rise/set and
499    begin/end twilight results inside the Arctic and Antarctic Circles
500    on days when the Sun did not rise or set. This error may have been
501    introduced in March 2012 with version 0.049_01, though it may go
502    back to the original release. Thanks to Adam Osuchowski for finding
503    this.
504
5050.070		2015-06-25	T. R. Wyant
506  The Astro::Coord::ECI::Sun almanac() method now returns the correct
507    quarter descriptions (equinox, solstice) when the 'station'
508    attribute is set to a location south of the Equator. The event
509    detail (which is encoded as a number) does not change, but is now
510    documented to refer to 'March equinox', and so on.
511
512  Add -date option to eg/almanac
513
5140.069		2015-06-07	T. R. Wyant
515  Update canned status of Iridium 63 (OID 25286)
516
5170.068		2015-03-26	T. R. Wyant
518  Make the satpass script time zone functionality work with Date::Manip
519    versions 6.49 and greater.
520
521  Track changes in Mike McCants' magnitude data.
522
5230.067		2014-11-10	T. R. Wyant
524  Fix failure in t/tle_support.t. I hope.
525
526  Add OID 15494 to canned magnitude table.
527
5280.066		2014-10-16	T. R. Wyant
529  Update Iridium 42 (OID 25077) to failed, per Kelso.
530
531  Regenerate canned magnitude table.
532
533  Croak on encountering JSON key SATNAME. This was replaced by
534    OBJECT_NAME during the REST interface's beta.
535
536  Remove installer question about installing satpass, per documented
537    deprecation schedule.
538
5390.065		2014-07-27	T. R. Wyant
540  Prevent TLE manufacture for oddball objects.
541
542  Add TLE pass variant PASS_VARIANT_TRUNCATE, which truncates passes to
543    the beginning and end times given to pass(), rather then computing
544    complete passes (and therefore requiring the satellite to rise and
545    set).
546
547  Expose Space Track time formatting and decoding routines for possible
548    use by subclasses. The key routines __to_json() and __from_json()
549    are still undocumented and considered highly experimental, though.
550    Sorry.
551
552  Add OID 00694 to Astro::Coord::ECI::TLE canned magnitudes.
553
5540.064		2014-05-29	T. R. Wyant
555  Add Astro::Coord::ECI::TLE method illuminated()
556
5570.063		2014-05-02	T. R. Wyant
558  Allow PASS_VARIANT_BRIGHTEST event even if the 'visible' attribute is
559    false.
560
561  Document magnitude functionality in satpass script.
562
563  Add pass variant PASS_VARIANT_BRIGHTEST. If this is set, an event
564    representing the time the satellite is brightest will be added to
565    the pass. This is ignored if the calculation can not be made (e.g.
566    if 'visible' is false, or 'intrinsic_magnitude' is undefined).
567
568  Clarify Astro::Coord::ECI::Moon phase() docs.
569
570  Eliminate uses of each() built-in.
571
572  Add magnitude functionality to satpass script.
573
5740.062		2014-04-01	T. R. Wyant
575  Update canned status for Iridium 29 (24944). Kelso says it's tumbling.
576
577  t/tle_json.t now only dumps versions on an error.
578
579  Require correct Perl version in t/tle_mag.t
580
581  In t/tle_json.t, work around problem that occurs when JSON::XS encodes
582    a number in a locale that uses a comma as the decimal point, such as
583    'de_DE.UTF-8'. Make a note of this in Astro::Coord::ECI::TLE, since
584    there is nothing I can do in my code to actually fix the problem.
585
586  The 'unpack' built-in does not default to $_ as the buffer to unpack
587    under Perls before 5.10.
588
589  Have Astro::Coord::ECI::TLE magnitude() method set the station's time.
590
591  Correct logic for building the fold_case() utliity subroutine under
592    Perls before 5.16.
593
594  Computation of (perhaps very) approximate magnitudes for satellites is
595    now supported. Changes to support this include:
596
597    - A magnitude() method on all classes that represent satellites;
598
599    - An intrinsic_magnitude attribute (defaulting to undef) on
600      Astro::Coord::ECI::TLE objects;
601
602    - Default intrinsic_magnitude to 7 on
603      Astro::Coord::ECI::TLE::Iridium objects;
604
605    - A canned table of intrinsic magnitudes in Astro::Coord::ECI::TLE
606      which includes most of the objects in the Celestrak visual list,
607      with magnitudes from Mike McCants' mcnames.zip and vsnames.zip
608      files;
609
610    - Support in the Astro::Coord::ECI::TLE parse() method to set the
611      magnitude of satellites that are in the table;
612
613    - Static method magnitude_table() on Astro::Coord::ECI::TLE to
614      maintain the canned magnitude table;
615
616    - Modify the Astro::Coord::ECI::Sun magnitude() method to take an
617      observing station argument (which is ignored) to be consistent
618      with the same-named Astro::Coord::ECI::TLE method.
619
620  The precess() and precess_dynamical() methods now do nothing to
621    objects set to Earth-fixed coordinates. Previously they were
622    converted to Ecliptic (and therefore inertial) coordinates, which
623    manifested as a bug when the observing station was an attribute of a
624    star.
625
626  Support new (to us) Space Track JSON keys FILE, OBJECT_TYPE, ORDINAL
627    and ORIGINATOR with same-named (except for being lower case)
628    attributes.
629
630  Method body_type() now returns the 'object_type' attribute if that is
631    defined. If not it computes its return from the object name, like it
632    always has.
633
6340.061		2014-01-13	T. R. Wyant
635  On install, warn that I intend to remove the 'install satpass'
636    question asked by Build.PL and Makefile.PL. The only way to install
637    the satpass script will be to run Build.PL or Makefile.PL with the
638    '-y' option. Also warn of eventual package name change, from
639    'Astro-satpass' to 'Astro-Coord-ECI'.
640
641  Warn every time Astro::Coord::ECI::TLE->parse() encounters JSON key
642    SATNAME. This was removed while Space Track's REST interface is
643    still in beta.
644
645  Computation of a Doppler shift based on the station's 'frequency'
646    attribute is now fatal. The body's 'frequency' attribute should be
647    set instead.
648
649  Remove all references to the satpass 'lit' setting and the
650    corresponding Astro::Coord::ECI 'limb' attribute, which were
651    deprecated out long since.
652
653  Remove all mention of the 'upper' argument to the Astro::Coord::ECI
654    azel() method. It's still an exception to pass a second argument,
655    though.
656
657  Remove all references to SOAP::Lite in the satpass code, except for
658    POD saying it was gone.
659
660  Various changes to Astro::Coord::ECI::TLE to try to support
661    prospective classes representing non-orbiting objects. These are
662    experimental, and may change or be retracted with little or no
663    notice. The hope is a class that can represent the objects in one of
664    NASA's .kmz files that are published for certain launches. These
665    include:
666
667    * Refactoring illumination and periodic position calculations in the
668      pass() method;
669
670    * Add public method intrinsic_events(), which returns events
671      intrinsic to the body, rather than observational ones like rise
672      and set, and call it in the pass() method;
673
674    * Add protected (and therefore doubly experimental) method
675      __pass_backup_earliest() to limit how hard the pass() method tries
676      to find a rise time when the pass starts with the body above the
677      horizon.
678
679    I have no idea whether the class this is in support of will ever see
680    the light of day.
681
682  Improve Astro::Coord::ECI::Utils::find_first_true() documentation.
683
6840.060		2013-12-18	T. R. Wyant
685  In eg/almanac, correct the handling of -sun and -moon when exactly one
686    is specified.  The erroneous processing forced both to be asserted
687    in all circumstances. Thanks to Mike Donn for reporting the
688    problem. and pointing out the solution.
689
6900.059		2013-12-03	T. R. Wyant
691  Make the zero-argument form of the maidenhead() method conform to the
692    docs.
693
6940.058		2013-11-25	T. R. Wyant
695  Handle undef period in pass(). At the moment it's handled by fudging in
696    90 minutes, which is bogus, but lets me experiment objects whose
697    motion is defined by a list of positions.
698
699  Add a paragraph on how passes are detected to the
700    Astro::Coord::ECI::TLE pass() documentation.
701
702  In the satpass script, implement 'sky lookup' in terms of
703    Astro::SIMBAD::Client script() rather than query(), so that we do not
704    need SOAP::Lite.
705
7060.057		2013-07-08	T. R. Wyant
707  Deprecate the satpass script.
708
709  Modify the appulse algorithm when the appulsing body is a satellite,
710    since the original algorithm did not necessarily converge to the
711    correct time for satellites in similar orbits. Thanks to Vidar
712    Tyldum for bringing this to my attention, and working with me on it.
713
714  Go back to simply allowing invalid international launch designators.
715    They started getting rejected about release 0.051_01 (2012-08-18).
716    Thanks to Vidar Tyldum for bringing this to my attention, and
717    working with me on it.
718
719  Take spaces as equivalent to zeroes in numeric fields (which I believe
720    is the old FORTRAN behavior), and in the numeric portions of the
721    international launch designator.
722
723  As a consequence of the above, the 'international' attribute will be
724    zero-filled on retrieval.
725
726  Update docs. Replace 'location' by 'station' where that is what is
727    meant. Add a (very brief) explanation of times to the overview. Also
728    add information on the Space Track REST interface to the overview.
729
730  Deprecations:
731
732  * The two-argument form of azel() is now fatal.
733
734  * The satpass script fails if you try to geocode without
735    Geo::Coder::Geocoder::US.
736
737  * Use of the satpass script 'lit' setting is now fatal; instead use
738    'edge_of_earths_shadow'.
739
740  * Use of the Astro::Coord::ECI::TLE 'limb' attribute is now fatal;
741    instead use 'edge_of_earths_shadow'.
742
743  * Feeding a JSON file to Astro::Coord::ECI::TLE->parse() which uses
744    the SATNAME key is deprecated, and produces a warning. This warning
745    will become fatal in the future. Instead use OBJECT_NAME.
746
747  * Warn every time a Doppler shift is computed using the station's
748    frequency. This will become fatal in the future. The frequency
749    should be set on the orbiting object.
750
7510.056		2012-12-08	T. R. Wyant
752  Deprecation warnings:
753
754  * The Doppler calculation warns the first time the frequency comes
755    from the station rather than the satellite.
756
757  * The satpass script warns every time geocoding is done if
758    Geo::Coder::Geocoder::US is not installed.
759
7600.055		2012-10-27	T. R. Wyant
761  Workaround for problem with Date::Manip clobbering $ENV{PATH} when it
762    is loaded.
763
764  T. S. Kelso recorded Iridium 4 (OID 24796) as being out of service
765    about midnight 20-Oct-2012 GMT. I have updated the canned status,
766    since I know he calls Iridium LLC to get the status.
767
768  Have the Astro::Coord::ECI::TLE status() method take optional OID
769    arguments for the 'show' subcommand.
770
7710.054		2012-10-09	T. R. Wyant
772  Correct field TLE_LINE0 in the JSON TLE generated by
773    Astro::Coord::ECI::TLE to include the leading '0 '.
774
775  INCOMPATIBLE CHANGE: In the JSON representaion of a TLE, the common
776    name of the body is now OBJECT_NAME, not SATNAME. This was done to
777    track the usage of Space Track, which did not previously have the
778    common name in its TLE data. The SATNAME field will still be used if
779    it appears in input, but is being put through a deprecation cycle.
780
7810.053		2012-09-10	T. R. Wyant
782  Suppress the 'OK' after an st( set => ...) in the satpass script.
783
784  Address satpass script Term::ReadLine load failures under the test
785    harness by doing the load in an eval, and falling back to the
786    non-ReadLine case.
787
788  Update the canned status table in Astro::Coord::ECI for the fact that
789    both Sladen and McCants call Iridium 51 (OID 25262) in service.
790
7910.052		2012-09-05	T. R. Wyant
792  Per schedule, the following deprecated items will produce a warning on
793    each use:
794
795    * The 'upper' argument of the Astro::Coord::ECI azel() method;
796
797    * The Astro::Coord::ECI::TLE 'limb' attribute;
798
799    * The satpass 'lit' setting.
800
801  All these warnings will become fatal in the first release on or after
802  March 1 2013.
803
804  Remove support for the 'horizon' setting of the Astro::Coord::ECI
805    'almanac_horizon' attribute. This was introdiced in 0.051_01, but on
806    second thought I decided the 'horizon' logic was ill-conceived.
807
808  Change the JSON representation of the International Launch Designator
809    to track Space Track change by Space Track to REST predicate
810    INTLDES.
811
812  Further corrections to t/tle_json.t for OS-dependant failures.
813
814  Enhance Astro::Coord::ECI::TLE->parse() to parse Iridium status off
815    the name if it is present.
816
817  Fudge the JSON in t/tle_json.t for system-to-system differences in
818    floating point representations (2-digit vs 3-digit exponent).
819
820  Remove the -json output formatting option from the satpass tle()
821    command. Instead, provide eg/convert_tle.
822
823  Add attribute almanac_horizon to Astro::Coord::ECI. This sets the
824    horizon for almanac calculations. The default is 0 (radians), but
825    other values are possible, as well as 'horizon' (meaning, use the
826    value of the 'horizon' attribute) and 'height' (meaning, depress the
827    horizon for the height of the observer above sea level). The satpass
828    script allows access to this.
829
830  Add JSON support for Astro::Coord::ECI::TLE and
831    Astro::Coord::ECI::TLE::Iridium. This includes the ability of
832    Astro::Coord::ECI::TLE->parse() to handle JSON orbital elements from
833    the Space Track REST interface (provided the optional JSON module
834    can be loaded), and hooks in both classes for them to serialize
835    themselves into Space-Track-like JSON.
836
837  Add -json option to the satpass script's tle() command, to get
838    canonical JSON output.
839
840  Make use of DateTime (if available) to interpret a non-numeric
841    Astro::Coord::ECI::TLE::Iridium zone attribute. If DateTime is not
842    available, fall back to the old implementation of setting $ENV{TZ}
843    and hoping localtime() responds to this.
844
845  Correct the documentation of the Astro::Coord::ECI 'twilight'
846    attribute, which really can not be set to 'civil', etc.
847
8480.051		2012-06-08	T. R. Wyant
849  Use YAML instead of YAML::Any, since they are both in the same distro,
850    and YAML does not suffer from deprecation warnings.
851
852  Add pass variant PASS_VARIANT_NO_ILLUMINATION. If attribute 'visible'
853    is false, this causes no illumination calculations at all to be
854    done.  This seems to save 20% in calculation time, but your mileage
855    may vary, especially inside the Arctic or Antarctic Circles.
856
857  Have bin/satpass warn the first time it geocodes if geocoding is done
858    directly using SOAP::Lite.
859
860  Make the Astro::Coord::ECI azel_offset() Doppler calculation
861    contingent on the availability of a radial velocity value.
862
863  Reinstate the Doppler calculation in Astro::Coord::ECI's
864    azel_offset(). Thanks to Vidar Tyldum for finding this omission.
865    While in the Doppler code, made the satellite the primary source of
866    the frequency. Getting the frequency from the observer object is
867    being put through a deprecation cycle, and will eventually result in
868    an error.
869
8700.050		2012-05-04	T. R. Wyant
871  The 'status iridium' command in the 'satpass' script is now fatal;
872    it has been deprecated in favor of 'status show' for some time,
873    issued a warning on every use since version 0.044.
874
875  Have Astro::Coord::ECI method heliocentric_ecliptic_cartesian() set
876    the object's {inertial} to true.
877
878  Add module Astro::Coord::ECI::Mixin to provide common-logic methods
879    which do not seem to fit the object hierarchy.
880
881  Promote method ecliptic_longitude() from Astro::Coord::ECI::Sun to
882    Astro::Coord::ECI.
883
884  In Astro::Coord::ECI:
885
886    * Add attribute 'sun', to hold the object used to convert to and
887      from Heliocentric coordinates.
888
889    * Add methods ecliptic_cartesian(), heliocentric_ecliptic(), and
890      heliocentric_ecliptic_cartesian().
891
892    * Consolidate code for conversion between Cartesian and spherical
893      coordinates.
894
895  In Astro::Coord::ECI::Set:
896
897    * Have the aggregate() method _not_ aggregate TLEs that have a blank
898      ID and model 'null'. This piece of ad-hocery was necessary to
899      prevent aggregation of "fake" TLEs representing different fixed
900      points in space (e.g. as created by the satpass or satpass2
901      'geodetic' command).
902
9030.049		2012-03-12	T. R. Wyant
904  In the Astro::Coord::ECI precess_dynamical() method, set the time of
905    the station attribute (if any) before precessing it.
906
907  In Astro::Coord::ECI::TLE, throw an exception if the Sun never rises.
908    This should not happen, but was encountered while sorting out the
909    precess_dynamical() bug.
910
911  Independently test appulses of all relevant classes, since this is how
912    the precess_dynamical() bug manifested.
913
914  In Astro::Coord::ECI::TLE::Set, override the get() method, and have
915    get( 'tle' ) return the concatenated TLEs of all members.
916
917  In Astro::Coord::ECI::TLE::Iridium reflection() method, fix
918    two-argument azel() call.
919
9200.048		2012-03-08	T. R. Wyant
921  Add keplers_equation() to Astro::Coord::ECI::Utils.
922
923  In the 'satpass' script's pass() subroutine, set the 'station'
924    attribute of all bodies in the @sky array before passing them to the
925    Astro::Coord::ECI::TLE pass() method.
926
927  In the Astro::Coord::ECI::TLE::Iridium flare() method, set the
928    'station' attribute of the object that represents the center of the
929    flare.
930
931  Have the first use of the Astro::Coord::ECI::TLE 'limb' attribute, the
932    satpass script 'lit' setting, and the Astro::Coord::ECI azel()
933    method with an 'upper' argument display a warning. These were
934    deprecated in September 2011.
935
936  In Astro::Coord::ECI:
937
938  * Have next_azimuth(), next_elevation(), and next_meridian() make use
939    of the 'station' attribute if the invocant is the only
940    Astro::Coord::ECI argument.
941
942  Have Astro::Coord::ECI::TLE->parse() take, as an optional first
943    argument, a reference to a hash that is used to initialize
944    attributes not initialized by parsing the TLE data.
945
946  Convert all eg/ scripts to use the 'station' attribute where possible,
947    and the optional Astro::Coord::ECI::TLE->parse() hash argument where
948    practical.
949
950  In Astro::Coord::ECI:
951
952  * Add 'station' attribute, as origin of observer-centered coordinate
953    systems. If azel() is called with the invocant as the only
954    Astro::Coord::ECI argument, it returns the coordinates of the
955    invocant relative to the 'station' attribute.
956
957  * Factor out the Cartesian portion of the azel() method, and add
958    methods neu() and enu(), to provide local Cartesian coordinates
959    relative to the 'station' attribute.
960
961  * Add method equatorial_apparent(), to calculate apparent equatorial
962    coordinates as seen from the location in the 'station' attribute.
963
964  * Work on velocity transformations from eci() to ecef(), neu(), enu(),
965    azel(), and equatorial(). All these seem sane to me, though I still
966    have no worked examples to test against.
967
968  I intend the use of the 'station' attribute to be the preferred way to
969  get observer-relative coordinates. I would like to eventually
970  deprecate $station->azel( $body ) and friends, as well as the practice
971  of passing an explicit station to the pass() and flare() methods, but
972  whether this actually happens is another question.
973
9740.047		2012-01-20	T. R. Wyant
975  Have the functionality related to the Astro::Coord::ECI::TLE
976    'pass_threshold' attribute (introduced in 0.046) take visibility
977    into account if the 'visible' attribute is true.
978
9790.046		2012-01-18	T. R. Wyant
980  Add Astro::Coord::ECI::TLE attribute 'pass_threshold'. If set to
981    something (in radians) other than undef, the sattelite's highest
982    point during a pass must be at least this high for the pass to be
983    reported.
984
985  Support the 'pass_threshold' setting in the satpass script.
986
987  Optional code that used to feel around for a YAML implementation now
988    just uses YAML::Any.
989
990  The utility subroutines deg2rad() and rad2deg() now support an
991    argument of undef which, unsurprisingly, returns undef.
992
993  The Changes file now conforms to Test::CPAN::Changes, and the author
994    test xt/author/changes.t has been added to keep it so.
995
9960.045		2011-12-05	T. R. Wyant
997  Have the satpass script's geocode command favor
998    Geo::Coder::Geocoder::US. Deprecate the use of SOAP::Lite.
999
1000  Have the satpass script set the height to 0 if the position was set by
1001    the geocode command, but height() failed.
1002
1003  Update the copy of the GNU GPL in LICENSES/Copying to have the current
1004    FSF address.
1005
1006  Document the release of Astro-App-Satpass2, and the eventual
1007    deprecation of the satpass script.
1008
1009  Try to clarify how the atmospheric refraction calculation works.
1010
10110.044		2011-10-19	T. R. Wyant
1012  Require Test::More 0.88 for testing. The requirement was actually
1013    introduced in version 0.042. Thanks to Christopher Kybe for
1014    picking up this discrepancy.
1015
1016  The satpass script's 'status iridium' command now generates a
1017    deprecation notice every time it is issued.
1018
10190.043		2011-08-29	T. R. Wyant
1020  The earthquake (Mineral Virginia USA) fire (Great Dismal Swamp) and
1021    flood (hurricane Irene) edition.
1022
1023  Updated the canned Iridium status in Astro::Coord::ECI::TLE for
1024    McCants' and Sladen's reporting of Iridium 26 (OID 24903) as out of
1025    service. They also updated Iridium 23 (OID 24906) to show it in
1026    service rather than failed, but I have continued to follow Kelso in
1027    calling it a spare.
1028
1029  Other than this, only documentation changes, mostly relating to the
1030    deprecation of the 'limb' attribute and its relation to the new
1031    'edge_of_earths_shadow' attribute.
1032
1033  In the satpass script, use the new 'edge_of_earths_shadow' setting in
1034    the 'flare' and 'position' commands, though the flare calculation
1035    does not actually make use of it.
1036
1037  Replace the Astro::Coord::ECI::TLE 'limb' attribute and the satpass
1038    'lit' setting with the 'edge_of_earth_shadow' attribute and setting.
1039    The new attribute and setting are numeric, and specify an increase
1040    in elevation (or decrease if negative) in units of the apparent
1041    radius of the body. The replaced attribute and setting still exist,
1042    but are deprecated, and will begin warning in the first release
1043    after March 1 2012. This setting/attribute is used by the pass
1044    calculation.
1045
1046  Provide an Astro::Coord::ECI azel_offset() method, which takes, as its
1047    optional second argument, an offset applied to the elevation, in
1048    terms of the apparent radius of the body whose position is being
1049    calculated. The two-argument version of the azel() method is now
1050    deprecated, and will begin warning in the first release after March
1051    1 2012.
1052
1053  Override the Astro::Coord::ECI correct_for_refraction() method in
1054    Astro::Coord::ECI::TLE, Astro::Coord::ECI::Moon, and
1055    Astro::Coord::ECI::Sun. The override simply returns the input
1056    elevation unmodified.
1057
10580.042		2011-08-07	T. R. Wyant
1059  In the Astro::Coord::ECI maidenhead() method:
1060
1061  * Document the fact that, when used as a mutator, it sets the position
1062    of the center of the square;
1063
1064  * Modify the accessor to try to minimize truncation error.
1065
1066  Added t/eci_maidenhead.t.
1067
10680.041		2011-07-25	T. R. Wyant
1069  Re-fix longitude out-of-range warning in Astro::Coord::ECI::Moon.
1070
1071  Fix problem with time specification in eg/sh_script when Date::Manip
1072    is not installed.
1073
1074  Add attribute 'pass_variant' to Astro::Coord::ECI::TLE. This tweaks
1075    the output of the pass() method, and can be set to the bitwise 'or'
1076    (a.k.a. '|') of the following exported values:
1077
1078    * PASS_VARIANT_NONE - No tweaks.
1079
1080    * PASS_VARIANT_VISIBLE_EVENTS - Remove from the output all pass
1081      events which were not visible. Ignored if the 'visible' attribute
1082      is false.
1083
1084    * PASS_VARIANT_FAKE_MAX - Create a 'max' event representing the
1085      largest visible elevation if the absolute max was filtered out by
1086      PASS_VARIANT_VISIBLE_EVENTS.
1087
1088    * PASS_VARIANT_START_END - Report the first and last pass events as
1089      PASS_EVENT_START and PASS_EVENT_END. These are the same as
1090      PASS_EVENT_RISE and PASS_EVENT_SET unless the 'visible' attribute
1091      is true and PASS_VARIANT_VISIBLE_EVENTS is asserted.
1092
1093  Minor optimization to the pass() method: the changes of 0.039_01
1094    through 0.039_05 left the appulse calculation before the point at
1095    which provisional passes were accepted or rejected. This has been
1096    moved below that point.
1097
1098  New example script, eg/xml that makes use of the 'pass_variant'
1099    attribute, and generates XML from pass data using XML::Writer.
1100
11010.040		2011-07-06	T. R. Wyant
1102  Tried to make the documentation of the Astro::Coord::ECI::TLE
1103    lazy_pass_position clearer.
1104
1105  Unconditionally set lazy_pass_position in the satpass script, since it
1106    recomputes position anyway.
1107
1108  Added a few words to the OVERVIEW about how to get results more like
1109    those of the Heavens Above web site.
1110
1111  Fix yet more problems in Astro::Coord::ECI::TLE->pass():
1112
1113  * Do not report passes which ended before the prediction interval
1114    started.
1115
1116  * Rework the implementation of the 'interval' attribute to be
1117    (hopefully!) more efficient, and to fix incorrectly-reported
1118    illuminations.
1119
1120  * Fix incorrect rise (and sometimes max) times when the pass is in
1121    progress when the prediction interval starts and the 'visible'
1122    attribute is false.  The previous fix only worked if the 'visible'
1123    attribute was true.
1124
1125  Add Astro::Coord::ECI::TLE attribute 'lazy_pass_position', to give the
1126    pass() method permission not to calculate and report event position
1127    if the event's time can be calculated without calculating position.
1128
1129  The satpass script's 'verbose' setting now works as advertised.
1130
1131  Re-fix the time-zone-dependant test failures in t/tle_flare.t.
1132
1133  Fix more problems in Astro::Coord::ECI::TLE->pass():
1134
1135  * Fix detection and calculation of events of visible passes which
1136    begin during the day, or any pass in progress at the beginning of
1137    the computation interval.
1138
1139  Have Astro::Coord::ECI::TLE->parse() throw a warning if it can not
1140    understand the --effective date, and record the effective date as
1141    undef. Also allow --effective dates without a fractional part of the
1142    second.
1143
1144  Add more tests to try to capture all these changes.
1145
1146  Fix various problems in Astro::Coord::ECI::TLE->pass(), also brought
1147    to my attention by Jaap Meijers:
1148
1149    * Incorrect time of maximum elevation when only one of the original
1150      one-minute samples is above the horizon.
1151
1152    * Sporadic detection of passes which spend less than a minute above
1153      the horizon.
1154
1155    * Potentially, sporadic detection of passes which spend less than a
1156      minute illuminated before daylight occurs. I have no examples of
1157      this, though.
1158
1159  Add tests for Astro::Coord::ECI::TLE->pass(). More are needed.
1160
1161  Make the Astro::Coord::ECI::TLE pass() method more lenient when
1162    screening for passes in which the satellite is illuminated. Thanks
1163    to Jaap Meijers for bringing this to my attention.
1164
11650.039		2011-04-29	T. R. Wyant
1166  Silence warnings about out-of-range longitude which are sometimes
1167    generated when computing the position of the Moon.
1168
1169  Added -dump-headers command line option to eg/passes.
1170
11710.038		2011-04-14	T. R. Wyant
1172  Updated code that uses the optional Astro::SpaceTrack module to
1173    require version 0.052 wherever the Space Track web site is (or may
1174    be) accessed.
1175
1176  Removed calls to _INSTANCE in little-used code in bin/satpass. It must
1177    be little-used, since it hasn't been imported from Params::Util
1178    since version 0.033 dated 17-Sep-2010.
1179
1180  Fix to zone attribute code in bin/satpass, so that it can be cleared
1181    once set.
1182
11830.037		2011-04-04	T. R. Wyant
1184  Added a zone attribute to Astro::Coord::ECI::TLE::Iridium, so that it
1185    could properly distinguish between -am and -pm flares somewhere
1186    other than in the local zone. Thanks to CPAN Testers for finding
1187    this consequence of publishing a t/iridium.t that everyone can run.
1188
11890.036		2011-04-02	T. R. Wyant
1190  t/iridium.t no longer requires any extra data for its execution.
1191
1192  The satpass 'status iridium' command, which has been deprecated for
1193    quite a while, now issues a warning the first time it is issued. See
1194    the satpass documentation for the the schedule for its removal.
1195
1196  Document Astro::Coord::ECI::TLE::Iridium max_mirror_angle attribute.
1197
1198  Correct export tag documentation in Astro::Coord::ECI::TLE (from
1199    ':constant' to ':constants').
1200
1201  Correct the attribute() method on Astro::Coord::ECI,
1202    Astro::Coord::ECI::TLE, and Astro::Coord::ECI::TLE::Iridium.
1203    Formerly it was returning false for some extant attributes.
1204
12050.035		2011-03-03	T. R. Wyant
1206  Removed the rightascension attribute in favor of the ascendingnode
1207    attribute. This is the last step in its deprecation.
1208
1209  Update the canned Iridium statuses in Astro::Coord::ECI::TLE for the
1210    taking-out-of-service of Iridium 23. Following Kelso, I have marked
1211    it spare, rather than failed.
1212
12130.034		2010-12-06	T. R. Wyant
1214  Make code for Astro::Coord::ECI zero-argument ecliptic() less cute
1215    also, to try to forestall problems.
1216
1217  Update canned Iridium statuses in Astro::Coord::ECI::TLE, to cover the
1218    replacement of Iridium 23 (24906) with Iridium 11 (25578) about
1219    November 3 2010.
1220
1221  Update and re-enable xt/author/iridium_status.t.
1222
1223  Try to avoid panic in Astro::Coord::ECI zero-argument geocentric()
1224    under at least one version by using less-cute code to compute the
1225    value. The problem could be reproduced using OID 25591 epoch
1226    30-Nov-2009 05:49:13 (which was over a year old at the time of
1227    testing).
1228
1229  This release has known failures in xt/author/iridium_status.t.
1230
12310.033		2010-09-17	T. R. Wyant
1232  Fix glitch in Astro::Coord::ECI::TLE::Iridium flare() where the
1233    maximum magnitude logic was being called when a flare was not
1234    possible.
1235
1236  Add t/sgp4-ver.tle to the distribution, instead of asking people to
1237    download it. Thanks to Dr. T. S. Kelso.
1238
1239  Add attribute rcs (radar cross-section) to Astro::Coord::ECI::TLE.
1240    That class' parse() method will populate the rcs attribute if it
1241    finds --rcs number on the name line of a NASA-format TLE.
1242
1243  Require version 5.64 of Exporter, so I don't have to juggle export
1244    tags for the benefit of early Perls.
1245
1246  Drop dependency on Params::Util.
1247
1248  Move author tests from xt/ to xt/author/.
1249
1250  Make sure POD links specify text.
1251
1252  Make minimum Perl version 5.6.2, since that is the lowest version I
1253    have a prayer of supporting.
1254
12550.032		2010-07-03	T. R. Wyant
1256  Have Astro::Coord::ECI::TLE complain every time the rightascension
1257    attribute is accessed. This is being deprecated in favor of the
1258    ascendingnode attribute. Elimination is scheduled for the first
1259    release in 2011.
1260
1261  Consolidate prerequisites into inc/Astro/Coord/ECI/Meta.pm.
1262
1263  Don't require Module::Build for configuration when building a
1264    distribution. This is controlled by environment variable
1265    MAKING_MODULE_DISTRIBUTION.
1266
1267  Document that Astro::Coord::ECI::TLE::Iridium will probably not work
1268    for Iridium Next satellites, to be launched starting about 2015.
1269
1270  Move acknowledgment of Goran Gasparovic from bin/satpass to
1271    lib/Astro/Coord/ECI.pm, since that's where the code is and where the
1272    acknowledgment should have been all along, and so it does not get
1273    lost when bin/satpass is superseded by App::Satpass2.
1274
1275  Fix fatal error in satpass when tilde-expanding a non-existent user
1276    name. It's still an error, just not fatal.
1277
1278  Tweak the documentation of Astro::Coord::ECI::TLE->is_valid_model(),
1279    to make it clearer why it was provided, and make it obvious that it
1280    can be called as a static method.
1281
1282  Fix bug in precession of equatorial coordinates, which would cause an
1283    error if no observing station was passed to the subroutine.
1284
1285  Add Astro::Coord::ECI::TLE method body_type(), which computes the type
1286    of the body from the common name using an algorithm similar to the
1287    one documented on Space Track's Satellite Box Score page.
1288
1289  Weaken recommendation of Time::y2038 when run under Perl 5.12 and
1290    above, since I really don't think it's needed.
1291
12920.031		2010-05-06	T. R. Wyant
1293  Add the maidenhead() method to Astro::Coord::ECI, to get or set
1294    geodetic position in the Maidenhead Locator System.
1295
1296  Update install instructions in README to include cpan, cpanp, or ppi
1297    as appropriate.
1298
1299  Add example script eg/passes to download TLEs and predict passes in
1300    one fell swoop.
1301
1302  Change the output in the Astro::Coord::ECI::Sun example to UT, and add
1303    a note why. Thanks to Richard Hardwick for raising this issue.
1304
13050.030		2010-02-26	T. R. Wyant
1306  Update copyright in README to 2010.
1307
1308  Consolidate all optional module logic, to eliminate duplicate code
1309    between Makefile.PL and Build.PL, and so the messages all have the
1310    same 'look and feel.' Dropped XML::Parser from the list, since it
1311    is no longer used directly by any supported code.
1312
1313  Add the Heavens Above web site to Astro::Coord::ECI's 'SEE ALSO'.
1314
1315  Have the satpass script look in $ENV{USERPROFILE} for the
1316    initialization file, in addition to all the other possibilities.
1317
1318  Use explicit tolerances for fractional results in the Julian date
1319    conversion tests in t/basic.t. This is for Strawberry Perl under
1320    ReactOS 0.3.11, which seems to have a case of the .999999s.
1321
1322  Trap possible exception from gmtime when generating the sgp4r
1323    'mean eccentricity < 0 or >= 1' error in Astro::Coord::ECI::TLE.
1324
13250.029		2010-02-04	T. R. Wyant
1326  Date::Manip and Time::y2038 are no longer 'recommended' but 'optional'.
1327    This means not telling the tool chain about them, but doing custom
1328    checks, and custom, gentler messages about why you might (or might
1329    not!) want these modules.
1330
1331  Centralize the decision about what time routines to use in
1332    Astro::Coord::ECI::Utils, and have it export to the other modules,
1333    the tests, the 'satpass' script, and the example scripts.
1334
1335  Rewrite t/parse_date.t so that it no longer needs Time::y2038.
1336    Instead, it uses precomputed times, which it offsets for the target
1337    system's epoch when it runs.
1338
1339  The above was done in an attempt to clarify the role of the optional
1340    modules, and cases where they might not be desirable. Thanks to
1341    Christopher Sylvain for identifying the problems and working with me
1342    on their solution.
1343
1344  Rewrite the time portions Astro::Coord::ECI::OVERVIEW to better
1345    reflect the current state of the time handling. Plus, retitle it so
1346    that hopefully it will actually appear in the distribution.
1347
13480.028		2010-01-11	T. R. Wyant
1349  Fix bug introduced in 0.027, in which the Astro::Coord::ECI::TLE
1350    pass() method failed to include the {appulse} data when an appulse
1351    was found.
1352
13530.027		2010-01-08	T. R. Wyant
1354  Correct (I hope!) the computation of illumination changes in the
1355    Astro::Coord::ECI::TLE pass() method. The original could miss them
1356    in the first or last minute of the pass.
1357
1358  Add exportable constants SPEED_OF_LIGHT (in kilometers per second) and
1359    SECS_PER_SIDERIAL_DAY to Astro::Coord::ECI::Utils.
1360
1361  Add attribute frequency (in Hertz) to Astro::Coord::ECI.
1362
1363  Have the Astro::Coord::ECI->azel() method return Doppler shift as the
1364    seventh element of the returned array if velocities are available
1365    AND the frequency attribute is set.
1366
1367  Attempt to correct the transverse velocities calculated by
1368    Astro::Coord::ECI->azel() for the rotation of the coordinate system.
1369    I am not convinced the corrections (or indeed the transverse
1370    velocities themselves) are correct.
1371
1372  The first time the Astro::Coord::ECI::TLE rightascension attribute is
1373    used in a given script, issue a warning that it is deprecated.
1374
1375  Update copyrights to 2010.
1376
1377  The Astro::Coord::ECI azel() method now returns velocities if
1378    these are available. The transverse velocities (azimuthal and
1379    elevational) are NOT corrected for the Coriolis effect.
1380
1381  Added Astro::Nova to the Astro::Coord::ECI 'SEE ALSO' section.
1382
1383  Date::Manip is no longer required. If it is not available, the
1384    'satpass' script will use a home-grown pseudo-ISO-8601 parser
1385    instead. The t/parse_time.t test was added to make sure this works
1386    as advertized.
1387
1388  Have 'authortest' run the normal tests without any of the optional
1389    modules. This requires either Test::Without::Module or Devel::Hide.
1390    If neither is available, 'authortest' will not attempt these tests.
1391
1392  Remove the last vestiges of the $ENV{DEVELOPER_TEST} machinery.
1393
1394  Rewrote xt/manifest.t to use Test::More.
1395
1396  All modules' versions set to 0.026_01. In the future all modules in
1397    a given release will have the same version number.
1398
1399  Convert all modules to the CPAN-recommended license.
1400
1401  Author tests no longer rely on environment variable DEVELOPER_TEST.
1402    Instead, they are executed by ./Build authortest. This means author
1403    tests are no longer available via the ExtUtils::MakeMaker build.
1404
1405  Astro::Coord::ECI:
1406
1407    * Modify correct_for_refraction() to work down to (and a bit below)
1408      the horizon setting if that is negative. Thanks to Vidar Tyldum
1409      Hansen of Kongsberg Satellite Services AS for identifying the
1410      need for this, and working with me on it.
1411
1412  satpass:
1413
1414    * Add the 'refraction' parameter, to allow the user to turn off
1415      atmospheric refraction (it is on by default).
1416
14170.026		2009-10-02	T. R. Wyant
1418  Astro::Coord::ECI 0.026:
1419
1420    * Default the {inertial} attribute appropriately.
1421
1422    * Add the next_azimuth() method to compute when a body passes the
1423      given azimuth. Thanks to Lixus Zoran for suggesting this on the
1424      geo-perl mailing list.
1425
1426  Astro::Coord::ECI::Moon 0.007:
1427
1428    * Default the {inertial} attribute appropriately.
1429
1430  Astro::Coord::ECI::Sun 0.010:
1431
1432    * Default the {inertial} attribute appropriately.
1433
1434  Astro::Coord::ECI::TLE 0.020:
1435
1436    * Default the {inertial} attribute appropriately.
1437
1438    * Deprecate the {rightascension} attribute in favor of the
1439      {ascendingnode} attribute. See the POD for the
1440      deprecation plan.
1441
14420.025		2009-09-07	T. R. Wyant
1443  Astro::Coord::ECI 0.035:
1444
1445    * Correct documentation of matrix math in azel() method.
1446
1447  Astro::Coord::ECI::TLE 0.019:
1448
1449    * Add and document validate() method.
1450
1451    * Make max_effective_date() ignore undef arguments.
1452
1453    * More verbose message for bad eccentricity in sgp4r.
1454
1455    * Correct description of synopsis to match what it actually does.
1456
1457  Astro::Coord::ECI::TLE::Set 0.008:
1458
1459    * Add and document validate() method.
1460
1461  bin/satpass 0.024:
1462
1463    * Add validate command.
1464
1465  Build.PL:
1466
1467    * Remove need for Module::Build for configuration, since I also
1468      supply Makefile.PL.
1469
14700.024		2009-08-18	T. R. Wyant
1471  General:
1472
1473    * Require Test::More 0.40 for testing.
1474
1475  Astro::Coord::ECI 0.024:
1476
1477    * Increment version. No other changes.
1478
1479  Astro::Coord::ECI::TLE 0.018:
1480
1481    * Add methods semiminor(), apoapsis(), apogee(), periapsis(), and
1482      perigee.
1483
1484    * Add 'effective' attribute, with logic in the parse() method to
1485      parse Astro::SpaceTrack --effective date out of line 0 of the
1486      TLE. Thanks to Thomas Wehr for reporting the problem this
1487      addresses, and T. S. Kelso for explaining what was needed to
1488      fix it.
1489
1490    * Add method max_effective_date() to figure out what date to use,
1491      since things are becoming rather complicated.
1492    * Add method tle_verbose() to centralize the verbose output of TLE.
1493
1494  Astro::Coord::ECI::TLE::Set 0.007:
1495
1496    * Add method max_effective_date() to do the right thing when there
1497      is more than one TLE to consider.
1498
14990.023		2009-03-09	T. R. Wyant
1500  General:
1501
1502    * Test t/tle_exception.t is no longer a developer test, but it will be
1503      skipped unless the user has Time::y2038.
1504
1505  Astro::Coord::ECI 0.023:
1506
1507    * Add method equatorial_unreduced(), for those who are only interested
1508      in range and velocity.
1509
1510    * Attempt to straighten out velocities when transforming among ECEF,
1511      ECI, and equatorial. No tests yet, though, so I have no idea if
1512      it is right. Note that as a consequence of this change it is
1513      possible to have an object without a velocity, since inertial
1514      objects no longer default to 0 velocity.
1515
1516  Astro::Coord::ECI::TLE 0.017:
1517
1518    * Set Iridium 91 in service in canned status, reflecting updates by
1519      Rod Sladen and T. S. Kelso. This is the real reason for the
1520      release; otherwise I would have sat on it until I had velocity
1521      tests.
1522
15230.022		2009-02-15	T. R. Wyant
1524  General:
1525
1526    * Make new test t/tle_exception.t a developer test until I can figure
1527      out why it only runs on my configuration.
1528
15290.021		2009-02-13	T. R. Wyant
1530  General:
1531
1532    * Make Time::y2038 recommended rather than required, since
1533      ActivePerl has problems with that module. We use it if
1534      available, otherwise we fall back to the core modules
1535      (and Time::Local if needed).
1536
1537    * Add eg/closest and eg/positions, showing calculation of the
1538      closest approach to a given point, and standalone calculation
1539      of the positions of all bodies at a given time.
1540
1541    * Correct '## no critic' in various places.
1542
1543  Astro::Coord::ECI 0.021:
1544
1545    * Trap any exceptions encountered when setting the time, set the time
1546      to undef (since otherwise we're left in an inconsistent state)
1547      and re-raise the exception.
1548
1549  Astro::Coord::ECI::TLE 0.016:
1550
1551    * Add OID number to exceptions related to orbital elements.
1552
1553    * Correct error messages involving using a near-earth model on a
1554      deep-space satellite or vice versa.
1555
1556    * Document the units of the model results (km or km/sec).
1557
1558    * Update canned Iridium status for the loss of Iridium 33 in a
1559      collision with Cosmos 2251.
1560
1561  Astro::Coord::ECI::TLE::Set 0.006:
1562
1563    * Tell carp not to report Astro::Coord::ECI (and friends) errors
1564      as originating in Astro::Coord::ECI::TLE::Set.
1565
1566  bin/satpass 0.021:
1567
1568    * Add gmt parameter which, if true, causes time output to be GMT.
1569
1570    * Trap Astro::Coord::ECI::TLE modeling exceptions in the 'flare',
1571      'pass', and 'position' commands, so that the whole command does
1572      not abort when this happens. SIGINT still aborts the whole
1573      command. Add -quiet option to supress error output.
1574
1575    * Mark geocode_ca as unsupported and probably not working, since
1576      they have started requiring registration for use of their
1577      free port.
1578
1579  Build.PL:
1580
1581    * Change check for Astro::SIMBAD::Query to Astro::SIMBAD::Client
1582
1583  Makefile.PL:
1584
1585    * Change check for Astro::SIMBAD::Query to Astro::SIMBAD::Client
1586
15870.020		2009-01-09	T. R. Wyant
1588  General:
1589
1590    * Add Time::y2038 as prerequisite, and use in place of Time::Local and
1591      CORE gmtime and localtime functions.
1592
1593    * Add Params::Util 0.25 as prerequisite.
1594
1595    * Add Astro/Coord/ECI/Overview.pod to try to give a "big picture".
1596
1597    * Eliminate function calls to UNIVERSAL::can and UNIVERSAL::isa in
1598      favor of Params::Util::_INSTANCE(), ::_CLASSISA(), or
1599      Astro::Coord::ECI::Utils::embodies().
1600
1601    * Update copyright date to 2009.
1602
1603    * Restructure Build.PL and Makefile.PL to better adapt to the
1604      installed version.
1605
1606    * Distribute t/critic.t, t/executable.t, t/iridium_status.t,
1607      t/manifest.t, and t/perlcriticrc but do not run them unless
1608      environment variable DEVELOPER_TEST is set.
1609
1610    * Bring code up to perlcritic --stern with exceptions contained in
1611      t/perlcriticrc. This was not done to bin/satpass, since I plan to
1612      retire it.
1613
1614  Astro::Coord::ECI 0.020:
1615
1616    * Use represents() rather than isa() on the argument (if any) to the
1617      equatorial(), next_elevation(), and next_meridian() methods, to
1618      allow Astro::Coord::ECI::TLE::Set objects.
1619
1620  Astro::Coord::ECI::Moon 0.006:
1621
1622    * Make case of 'Moon' in next_quarter() output consistent.
1623
1624    * Append 'Moon' to first and last quarter description.
1625
1626    * Add method next_quarter_hash(), which wraps next_quarter() and
1627      returns a hash similar to the one returned by the
1628      Astro::Coord::ECI::TLE->pass() method.
1629
1630    * Add method almanac_hash(), which wraps almanac() in a manner similar
1631      to next_quarter_hash().
1632
1633  Astro::Coord::ECI::Star 0.006:
1634
1635    * Add method almanac_hash(), which wraps almanac() and returns a hash
1636      similar to the one returned by the Astro::Coord::ECI::TLE->pass()
1637      method.
1638
1639  Astro::Coord::ECI::Sun 0.008:
1640
1641    * Add method next_quarter_hash(), which wraps next_quarter() and
1642      returns a hash similar to the one returned by the
1643      Astro::Coord::ECI::TLE->pass() method.
1644
1645    * Add method almanac_hash(), which wraps almanac() in a manner similar
1646      to next_quarter_hash().
1647
1648  Astro::Coord::ECI::TLE::0.015:
1649
1650    * Add ability to manufacture the 'tle' attribute when the object was
1651      not generated by the parse() method.
1652
1653    * Supress object dump when environment variable DEVELOPER_TEST is set.
1654
1655    * Correct SYNOPSIS to include $tle->set(backdate=>0) with comments.
1656
1657    * Document models sgp4r and model4r under the 'model' attribute, and
1658      add them to the DESCRIPTION section of the POD.
1659
1660  Astro::Coord::ECI::TLE::Iridium 0.007:
1661
1662    * Document attributes am, day, extinction, and pm.
1663
1664  Astro::Coord::ECI::TLE::Set 0.005:
1665
1666    * Add explicit represent() method.
1667
1668    * Add optional options hash as first argument of aggregate(). The only
1669      option is {select => $time} which if true causes select($time) to
1670      be called on any Astro::Coord::ECI::TLE::Set objecgts created.
1671
1672  Astro::Coord::ECI::TLE::Utils 0.010:
1673
1674    * Add subroutine embodies($obj, $class) as a safe way to call
1675      represents() without throwing an exception if $obj is not blessed.
1676
1677  bin/satpass 0.020:
1678
1679    * Use Geo::WebService::Elevation::USGS for height().
1680
1681    * Drop support for SIMBAD 3, since U. Strasbourg did a while back.
1682
1683    * Trap SOAP errors and correct result hash expansion in height().
1684
1685    * Eliminate function calls to UNIVERSAL::can and UNIVERSAL::isa.
1686
1687    * Correct (reverse) documented meaning of flare() options -am, -day,
1688      and -pm.
1689
1690    * Document models sgp4r and model4r under the 'model' paramter.
1691
1692    * Revise 'NOTES' section to cover plans for App::Satpass2, and changes
1693      for this release.
1694
16950.019		2008-10-27	T. R. Wyant
1696  Astro::Coord::ECI 0.019:
1697
1698    * Truncate SYNOPSIS code.
1699
1700    * Range-check angular position input, with warning if out of range:
1701
1702      - Latitude: - PI/2 <= latitude <= PI/2;
1703
1704      - Longitude: - 2*PI <= longitude < 2*PI (Jean Meeus' examples
1705        sometimes use examples outside the conventional range);
1706      - Right ascension: 0 <= right ascension < 2*PI
1707
1708  Astro::Coord::ECI::Moon 0.005:
1709
1710    * Clarify and expand SYNOPSIS code.
1711
1712  Astro::Coord::ECI::Star 0.005:
1713
1714    * Correct and expand SYNOPSIS code.
1715
1716    * Normalize computed right ascension to range 0 to 2 PI.
1717
1718  Astro::Coord::ECI::Sun 0.007:
1719
1720    * Clarify and expand SYNOPSIS code.
1721
1722  Astro::Coord::ECI::TLE 0.014:
1723
1724    * Clarify and expand SYNOPSIS code.
1725
1726  Astro::Coord::ECI::TLE::Iridium 0.006:
1727
1728    * Correct SYNOPSIS code.
1729
1730    * Document problems with magnitude estimate when the Sun is close
1731      to the horizon as seen from the satellite.
1732
1733  Astro::Coord::ECI::TLE::Set 0.004:
1734
1735    * Clarify and complete SYNOPSIS code.
1736
17370.018		2008-10-03	T. R. Wyant
1738  Astro::Coord::ECI 0.018:
1739
1740    * Update version number and copyright date. No other changes.
1741
1742  Astro::Coord::ECI::TLE 0.013:
1743
1744    * Add semimajor(), to calculate and return the semimajor axis of the
1745      orbit.
1746
1747    * Update Iridium status: mark Iridium 28 (OID 24948) failed, and
1748      Iridium 95 (OID 27375) as in service (was spare).
1749
1750  bin/satpass 0.018:
1751
1752    * Under Mac OS X, use Mac::Pasteboard for clipboard operations if
1753      available; supress pbcopy warning when run as cron job.
1754
1755    * Fix 'height' query to track changes in USGS' elevation web service.
1756
1757  t/tle_sgp4r.t:
1758
1759    * Correct the code that extracts the needed TLEs from the downloaded
1760      zip file.
1761
17620.017		2007-12-30	T. R. Wyant
1763  Astro::Coord::ECI 0.017:
1764
1765    * Fall back to homegrown (and un-general, and insufficiently tested)
1766      code if Storable::dclone not available.
1767
1768  Astro::Coord::ECI::TLE 0.012:
1769
1770    * Correct behavior when Scalar::Util::dualvar not present.
1771
1772  Astro::Coord::ECI::TLE::Iridium 0.005:
1773
1774    * Use max() and min() from Astro::Coord::ECI::Utils.
1775
1776  Astro::Coord::ECI::Utils 0.009:
1777
1778    * Added looks_like_number(), max(), min(), defaulting to the
1779      Scalar::Util or List::Util implementations if possible, but
1780      providing our own if not.
1781
1782    * Clarify load_module() documentation.
1783
1784  bin/satpass 0.017:
1785
1786    * Use looks_like_number() and max() from Astro::Coord::ECI::Utils.
1787
1788    * Recode _load_module to use Astro::Coord::ECI::Utils::load_module.
1789
1790    * Fix clipboard code to fail gracefully if Scalar::Util::weaken
1791      is unavailable.
1792
1793  t/{moon,sun}.t:
1794
1795    * Skip singleton test if Scalar::Util::refaddr not available.
1796
1797  t/pod_coverage.t:
1798
1799    * Correct also_private setting to make it skip all-uppercase+numeric
1800      (blind fix since mine seems to skip constants anyway, which is
1801      what I'm really trying to do).
1802
1803  t/tle.t:
1804
1805    * Use max() from Astro::Coord::ECI::Utils.
1806
1807  t/pod_spelling.t 0.010:
1808
1809    * Add stop words 'max' and 'min'.
1810
1811  bin/satpass 0.017:
1812
1813    * Supress '"our" variable $clipboard_unavailable masks earlier
1814      declaration ...' under 5.10.0.
1815
18160.016		2007-12-28	T. R. Wyant
1817  Astro::Coord::ECI 0.016:
1818
1819    * Increment version. No other changes.
1820
1821  Astro::Coord::ECI::TLE 0.011:
1822
1823    * Use PI-related constants from Astro::Coord::ECI::Utils.
1824
1825    * pass() no longer throws 'end before beginning' error if caused
1826      by setting backdate false; instead returns empty list of
1827      passes.
1828
1829  Astro::Coord::ECI::TLE::Iridium 0.004:
1830
1831    * flare() no longer throws 'end before beginning' error if caused
1832      by setting backdate false; instead returns empty list of
1833      passes.
1834
1835    * Add model 'sgp4r', based on 'Revisiting Spacetrack Report #3',
1836      and equivalent metamodel 'model4r.'
1837
1838    * Make metamodel 'model' execute sgp4r.
1839
1840    * Have 'period' take into account which model is being used.
1841
1842  Build.PL:
1843
1844    * Prompt for installation of 'satpass' script, defaulting to 'n'.
1845
1846  Makefile.PL:
1847
1848    * Fix license support check to work with developer versions of
1849      ExtUtils::MakeMaker.
1850
1851    * Prompt for installation of 'satpass' script, defaulting to 'n'.
1852
1853  bin/satpass 0.016:
1854
1855    * Document major changes in classes. No other changes.
1856
1857  eg/tle_period.t:
1858
1859    * Pseudo-test to compare the various period calculations.
1860
1861  eg/README:
1862
1863    * Update to add eg/tle_period.t
1864
1865  t/{eci,moon,star,sun}.t:
1866
1867    * Remove dependency on Math::Trig.
1868
1869    * Prefer Astro::Coord::ECI::Utils over local definitions of
1870      constants.
1871
1872  t/iridium.t:
1873
1874    * Clarify (I hope!) how to run the Iridium tests.
1875
1876  t/tle_sgp4r.t:
1877
1878    * New test for model sgp4r. TLEs are not included in the kit,
1879      but are downloaded if needed.
1880
1881  t/sgp4r.out:
1882
1883    * Comparison data for tle_sgp4r.t. Renamed from tforver.out in
1884      the 'Revisiting Spacetrack Report #3' download.
1885
1886  t/pod.t:
1887
1888    * Remove unused variable
1889
1890  t/pod_coverage.t:
1891
1892    * Remove unused variable
1893
18940.015		2007-11-15	T. R. Wyant
1895  Astro::Coord::ECI 0.015:
1896
1897    * Bump version number. No other changes.
1898
1899  bin/satpass 0.015:
1900
1901    * Document pod coverage test change, intent to and plans for
1902      implementing "Revisiting Spacetrack Report #3".
1903
1904    * Bump version.
1905
1906  t/pod_coverage.t:
1907
1908    * Specify all-caps routines as private, since some testers are
1909      getting failures on 'use constant' declarations. I don't get
1910      these, so the change is kind of blind.
1911
19120.014		2007-11-13
1913  Astro::Coord::ECI 0.014:
1914
1915    * Add equinox_dynamical attribute; precess() now uses this as start
1916      point and leaves the time alone. It is also used when going from
1917      ECI to ECEF, and set to the current time when going from ECEF to
1918      ECI.
1919
1920    * Add global $EQUINOX_TOLERANCE to determine minimum precession when
1921      converting from ECI to ECEF.
1922
1923    * Add method equinox_dynamical for performance.
1924
1925    * Document dynamical and universal times.
1926
1927    * Add method precess_dynamical() to precess to the given dynamical
1928      time. The precess() method simply converts its argument to
1929      dynamical and delegates to this.
1930
1931  Astro::Coord::ECI::Moon 0.004:
1932
1933    * Have model set equinox_dynamical attribute to modeled dynamical
1934      time.
1935
1936  Astro::Coord::ECI::Star 0.004:
1937
1938    * Set equinox_dynamical attribute before precessing to current
1939      equinox.
1940
1941    * Precess coordinates at end of time_set(), not in middle.
1942
1943  Astro::Coord::ECI::Sun 0.006:
1944
1945    * Have model set equinox_dynamical attribute to modeled dynamical
1946      time.
1947
1948  Astro::Coord::ECI::TLE 0.010:
1949
1950    * Add backdate attribute (default: true) to control whether pass()
1951      uses elements before their epoch.
1952
1953    * Use the alias() mechanism for special-case settings of the
1954      illum attribute.
1955
1956    * Have models set equinox_dynamical to the dynamical epoch.
1957
1958  Astro::Coord::ECI::TLE::Iridium 0.003:
1959
1960    * Have backdate attribute control whether flare() uses elements
1961      before their epoch.
1962
1963  Astro::Coord::ECI::TLE::Set 0.003:
1964
1965    * Minor documentation tweaks and POD fixes.
1966
1967  Astro::Coord::ECI::Utils 0.008:
1968
1969    * Add constant JD_OF_EPOCH, globals $DATEFORMAT and $JD_GREGORIAN,
1970      and subroutines date2jd, date2epoch, epoch2datetime, jd2date,
1971      jd2datetime.
1972
1973    * Add subroutine load_module and centralize all on-the-fly loading
1974      here, for support of .pmc modules.
1975
1976  bin/satpass 0.014:
1977
1978    * Add 'echo' and 'times' commands.
1979
1980    * Add 'backdate' parameter, propagate to pass() and flare().
1981
1982    * Add 'desired_equinox' parameter, use it when displaying inertial
1983      coordinates (only equatorial, at the moment).
1984
1985    * Allow pseudo-redirection of command output into a pipe.
1986
19870.013		2007-03-02	T. R. Wyant
1988  Astro::Coord::ECI 0.013:
1989
1990    * No code changes, but updated version to be visible to CPAN 'r'.
1991
1992  Astro::Coord::ECI::TLE 0.009:
1993
1994    * Updated canned Iridium status table for failure of Iridium 36 and
1995      its replacement by Iridium 97.
1996
1997  Astro::Coord::ECI::TLE::Iridium 0.002:
1998
1999    * Fixed occasional borderline-case spurious flare prediction.
2000
2001  bin/satpass 0.013:
2002
2003    * Added -version command option, to display preamble and exit.
2004
2005    * Wrap probe for clipboard helpers in eval{}. Among other things, this
2006      allows the script to run in taint mode.
2007
2008    * Add -choose option to list().
2009
2010    * Allow extra arguments to status show, to do selective status display.
2011
2012  t/moon.t:
2013
2014    * Fixed cosmetic undefined value error when Scalar::Util does not
2015      implement refaddr().
2016
2017  t/sun.t:
2018
2019    * Fixed cosmetic undefined value error when Scalar::Util does not
2020      implement refaddr().
2021
20220.012		2007-01-09	T. R. Wyant
2023  ECI.pm 0.012:
2024
2025    * Localized $Data::Dumper::Terse
2026
2027    * Fixed divide-by-zero in azel() when the points coincide.
2028
2029    * Convert angle() to use law of haversines rather than law of cosines,
2030      for better performance on small angles.
2031
2032  ECI/Sun.pm 0.005:
2033
2034    * Add magnitude() method.
2035
2036  ECI/TLE.pm 0.008:
2037
2038    * Add {body} and {station} to hash returned by pass().
2039
2040    * Add support for reblessing to Astro::Coord::ECI::TLE::Iridium if
2041      appropriate. This includes rebless(), before_reblessing(),
2042      after_reblessing(), alias(), can_flare(), status(), and the {reblessable}
2043      attribute.
2044
2045  ECI/TLE/Iridium.pm 0.001:
2046
2047    * Initial release.
2048
2049  ECI/Utils.pm 0.007:
2050
2051    * Confess on invalid acos() argument.
2052
2053    * Add find_first_true() to support finding Iridium flares.
2054
2055  bin/satpass 0.012:
2056
2057    * If a source file ends with a continued line, warn and abandon the
2058      line.
2059
2060    * Set the time on the appulsing body before obtaining its coordinates.
2061
2062    * Fix error in end time parser in position().
2063
2064    * Throw error if doing 'sky lookup' on a body that is already in the
2065      sky.
2066
2067    * Have pass() round the displayed time for the appulsing body.
2068
2069    * Add flare() to calculate Iridium flares.
2070
2071    * Modify position() to report flare potential for Iridium satellites.
2072
2073    * Added -choose option to pass(), position(), tle().
2074
2075    * Removed pass_old() and the timing parameter, strongly deprecated in
2076      version 0.011.
2077
2078    * Added {simbad_version} parameter to select SIMBAD software to use.
2079
2080  eg/iridium 0.001:
2081
2082    * New example calculating Iridium flares.
2083
20840.011		2006-10-26	T. R. Wyant
2085  ECI.pm 0.011:
2086
2087    * Add horizon attribute.
2088
2089  ECI/TLE.pm:
2090
2091    * Add pass() method and supporting attributes.
2092
2093  bin/satpass:
2094
2095    * Add check_version()
2096
2097    * Defer loading of optional modules to speed startup.
2098
2099    * Rewrite XML parsing to use either XML::Parser or XML::Parser::Lite,
2100      with XML::Parser being preferred.
2101
2102    * Fix fatal error when running off the end of the top-level command
2103      script.
2104
2105    * Support ~user in filenames.
2106
2107    * Convert pass() to use Astro::Coord::ECI::TLE->pass(). Old code
2108      remains as pass_old(), strongly deprecated.
2109
2110    * Use Time::HiRes for timing, if that is available.
2111
2112    * Document status of pass_old, 'timing' parameter (strongly
2113      deprecated) and the SIMBAD situation.
2114
2115  eg/iss:
2116
2117    * New example to demonstrate Astro::Coord::ECI::TLE->pass().
2118
21190.010		2006-09-23	T. R. Wyant
2120  ECI.pm 0.010:
2121
2122    * Check for null arguments on most calls, so we die now rather
2123        than later.
2124    * Fix undefined value when calling set() with no arguments.
2125
2126  ECI/Moon.pm 0.003:
2127
2128    * Make singleton object by default.
2129
2130  ECI/Sun.pm 0.004:
2131
2132    * Make singleton object by default.
2133
2134  bin/satpass 0.010:
2135
2136    * Add qualifiers -brief, -list, and -delete to macro command.
2137        Parameter explicit_macro_delete controls what the macro
2138        command does when given a name but no definition.
2139
2140    * Make -time work on macros and source commands.
2141
2142    * Add ability to abort macros and source scripts on error,
2143        controlled by parameter error_out.
2144
2145  Build.PL:
2146
2147    * Correct add_to_cleanup() call.
2148
2149    * Add omitted ECI/Sun.pm.
2150
2151  Makefile.PL:
2152
2153    * Add explicit PL_FILES => {}, to prevent old versions from
2154        trying to execute 'perl Build.PL Build'.
2155
21560.009		2006-07-23	T. R. Wyant
2157  ECI.pm 0.009:
2158
2159    * Add represents() method.
2160
2161  ECI/Sun.pm 0.003:
2162
2163    * Remove redundant definition of ASTRONOMICAL_UNIT; use AU from
2164        Astro::Coord::ECI::Utils
2165
2166  ECI/TLE.pm 0.006:
2167
2168    * Add is_model_attribute(), is_valid_model().
2169
2170  ECI/TLE/Set.pm 0.002:
2171
2172    * Allow Astro::Coord::ECI::TLE::Set objects as arguments of add().
2173
2174    * Take advantage of is_model_attribuite(), is_valid_model().
2175
2176  bin/satpass 0.009:
2177
2178    * Fix defaulting of second argument of quarters().
2179
2180    * Allow macros to override core commands. Macros can no longer
2181        call themselves, and core commands can be accessed explicitly
2182        by the syntax core.command.
2183
2184    * Relative times for the second and subsequent arguments of a
2185        command are relative to previous time argument of the same
2186        command, whether absolute or relative.
2187
2188  Build.PL 0.001:
2189
2190    * Initial version.
2191
21920.008		2006-07-14	T. R. Wyant
2193  ECI.pm 0.008:
2194
2195    * Support the use of Astro::Coord::ECI::TLE::Set objects in the
2196        angle() method.
2197
2198    * Add method attribute().
2199
2200  ECI/TLE.pm 0.005:
2201
2202    * Add the null model.
2203
2204  ECI/TLE/Set.pm 0.001 - New container object.
2205
2206  ECI/Utils.pm 0.006:
2207
2208    * Add dynamical_delta() method (was private method in ECI.pm).
2209
2210  bin/satpass 0.008:
2211
2212    * Use Astro::Coord::ECI::TLE::Set objects to represent satellites
2213        when we have more than one set of orbital elements.
2214
2215    * Add help for Astro::Coord::ECI::TLE::Set.
2216
2217    * Add and document 'singleton' parameter. Use it in pass() and
2218        position().
2219
2220    * Default end times relative to start times, rather than relative
2221        to the last explicit time.
2222
2223    * Fix interaction between clipboard functionality and test hook.
2224        Thanks to IMACAT for help diagnosing and verifying.
2225
2226    * Add acknowledgments.
2227
22280.007		2006-07-06	T. R. Wyant
2229  ECI.pm:
2230
2231    * Optimize, mostly by being smarter about when to clear cached
2232      coordinates.
2233
2234    * Correct spelling in POD.
2235
2236  ECI/Moon.pm:
2237
2238    * Change die to confess on programming error.
2239
2240    * Correct spelling in POD.
2241
2242  ECI/Star.pm:
2243
2244    * Correct spelling in POD.
2245
2246  ECI/Sun.pm:
2247
2248    * Correct spelling in POD.
2249
2250  ECI/TLE.pm:
2251
2252    * Modify internals for easier cache clearing.
2253
2254    * Better documentation of 'mean anomaly'.
2255
2256    * Correct spelling in POD.
2257
2258    * Trap invalid effective eccentricity in sgp4. The underlying cause
2259      of the problem is probably either an invalid TLE or using the TLE
2260      past its 'good until' date.
2261
2262  ECI/Utils.pm:
2263
2264    * Change die to confess on programming error.
2265
2266    * Correct spelling in POD.
2267
2268  Makefile.PL:
2269
2270    * Get rid of wrong-headed attempt to configure optional modules.
2271
2272  bin/satpass:
2273
2274    * Various documentation corrections.
2275
2276    * Correct spelling in POD.
2277
2278    * Add store() and retrieve() as interface to Storable.
2279
2280    * Centralize tilde expansion, and do it on cd(), load(), retrieve (),
2281      source(), store ().
2282
2283    * Preprocess -start and -end options of st(), to make dates
2284      consistent with the rest of satpass.
2285
2286    * Add -initialization_file command option.
2287
2288    * Add -optional option on source().
2289
2290    * Add localize(), and macro/source call frames to support this.
2291
2292    * Add localize subcommand to st().
2293
2294    * Make 'st show' a synonym for 'st get', and make 'st get' without
2295      arguments show all settings.
2296
2297    * Add test hooks, and a test to exercise the more arcane functions
2298      of the script.
2299
2300    * Add -source_layer and -retry_on_zero options to height_us().
2301
2302    * Add a separate height_ca() method that makes use of the above
2303      options when delegating to height_us(), in response to anomalous
2304      responses to height queries.
2305
2306    * Fix problem displaying appulses in pass().
2307
2308    * Make the position() display positions for a range of times. Add
2309      -realtime option to position() to display positions in
2310      near-real-time.
2311
2312    * Add drop().
2313
2314    * Fix formatting of error messages from the local coordinate
2315      formatters.
2316
2317    * Have position() display epoch and illumination when displaying
2318      objects from the observing list.
2319
23200.006		2006-06-07	T. R. Wyant
2321  ECI.pm:
2322
2323    * Cache some calculations for re-use.
2324
2325  ECI/Star.pm:
2326
2327    * Tweak docs.
2328
2329  ECI/Utils.pm:
2330
2331    * Add intensity_to_magnitude(), atmospheric_extinction().
2332
2333  bin/satpass:
2334
2335    * Correct check for whether location has been set. Old check
2336      did not recognize 0 latitude, longitude, or height.
2337
2338    * Special-case code to 'unset' tz when it is set to undef or ''.
2339
2340    * Make 'position' iterate over time, in real time with -realtime.
2341
2342    * Add -time global command option to time execution.
2343
2344    * Add 'country' parameter. Break out 'geocode' and 'height' to
2345      country-specific versions, and make the original command
2346      dispatch based on 'country' parameter or explicit argument.
2347
2348    * Allow formatting of local coordinates without range information.
2349
2350    * Round pass times to the nearest second (since strftime truncates).
2351
2352    * Add 'almanac' command options -horizon, -quarters, -transit, and
2353      -twilight to restrict the output.
2354
2355    * Make height_us() work with revised USGS SOAP calling sequence.
2356
23570.005		2006-04-21	T. R. Wyant
2358  ECI.pm:
2359
2360    * Add 'inertial' read-only attribute.
2361
2362    * Add equatorial coordinates relative to observer.
2363
2364    * Fix negative right ascension - should be mod 2 pi.
2365
2366    * Tweak docs, including fuller synopsis.
2367
2368  bin/satpass:
2369
2370    * Add local_coord parameter to determine local coordinate system
2371      (azel or equatorial).
2372
2373    * Modify pass and position output to use local_coord.
2374
2375  TLE.pm:
2376
2377    * Tweak synopsis, to show that setting time runs model.
2378
23790.004		2006-03-14	T. R. Wyant
2380  bin/satpass:
2381
2382    * Rewrite command parsing so that we can retain quotes and
2383      be POSIXly correct in option processing for the system
2384      command.
2385
2386    * Give tle command a -verbose qualifier, to produce a formatted
2387      listing of the orbital parameters.
2388
2389    * Provide HTML =item targets consistent with links.
2390
2391  ECI.pm:
2392
2393    * Clean up docs.
2394
2395  TLE.pm:
2396
2397    * Clean up docs, wrap some really long lines.
2398
2399    * Replace _fmod2p with mod2pi from Utils module.
2400
24010.003		2006-03-10	T. R. Wyant
2402  bin/satpass:
2403
2404    * Remove all uses of Clipboard, to try to get built under
2405      ActiveState's ActivePerl.
2406
2407    * Correct version number in Astro::SpaceTrack load.
2408
2409    * Accumulate Iridium operational statuses.
2410
2411    * Add status command to display satellite operational status.
2412
2413  Astro::Coord::ECI:
2414
2415    * Increment version, as a lazy way to increment the distribution
2416      version.
2417
2418    * Tweak documentation.
2419
2420  Astro::Coord::ECI::Utils:
2421
2422    * Make subclass of Exporter, since ActiveState's build
2423      seems to have a problem with 'use Exporter qw{import}'
2424      (except under darwin, strangely enough).
2425
2426    * Increment version.
2427
24280.002		2006-03-02	T. R. Wyant
2429  bin/satpass:
2430    * Behave better when no Clipboard module.
2431
2432    * Do not use Clipboard module under darwin.
2433
2434    * Require Astro::SpaceTrack 0.016 (if any).
2435
2436    * Default star distance now 10000 parsecs (was 1 parsec).
2437
2438    * Add 'sky lookup', using Astro::SIMBAD::Query.
2439
2440    * Modified 'sky' listing format to look like 'sky add' commands.
2441
2442  Astro::Coord::ECI:
2443
2444    * Add NAD83 ellipsoid.
2445
2446  Astro::Coord::ECI::Utils:
2447
2448    * Corrected documentation.
2449
24500.001		2006-02-17	T. R. Wyant
2451  Initial release
2452