Skip to content

2024

Hifitime version 4.0.0: A Leap Forward in Time Management

Months of meticulous development and rigorous testing culminate in version 4.0.0 of Hifitime, a reference time management library for engineering and scientific applications.

Hifitime inherently supports leap seconds, time scales, Julian dates, and lots more, while guaranteeing exactly one nanosecond accuracy for over 65 thousand years. Hifitime plans lunar missions via ANISE, flies onboard various spacecraft, coordinates satellite communications, and is used in exciting research on global navigation satellite systems like GPS and Galileo.

For those eager to dive into the technical details, you can find the Rust user guide here and the Python user guide here.

Github

Key improvements

One of the most significant changes in version 4.0.0 is how Epochs handle time scales. Epochs now retain their original time scales, simplifying conversions and ensuring that computations remain accurate without introducing single-digit nanosecond rounding errors. Special thanks to Guillaume for his dedicated work on this enhancement.

This change implies that the duration between two epochs is consistent with their time scale if both are in the same time scale. For example, the time difference over a leap second when both epochs are in UTC is a single second, instead of two seconds in version 3. The behavior from version 3 now requires converting one or both epochs to a leap-second free time scale.

Another notable change is in the serialization of durations. Previously, a 200-nanosecond duration was represented in JSON as {"centuries": 0, "nanoseconds": 200}. Now, it is serialized directly as 200 ns, its representation in the Système International (SI). The largest unit in this new serialization format is days, so a duration of 1.23456789 centuries will be serialized as 45092 days 14 h 12 min 44 s 546 ms 399 μs 744 ns.

Epochs are now nominally printed in their Gregorian representation in their respective time scale, whereas the debug printing (or __repr__ in Python) will print them in UTC.

Python users may now use todatetime and fromdatetime to convert a Hifitime epoch into a Python datetime object.

Bug fixes

In previous versions, representing date times in the Gregorian format required complex calculations that were prone to errors, especially for dates before 1800. Version 4 simplifies these computations, eliminating known bugs. Hifitime uses a consistent Gregorian calendar representation, avoiding any discrepancies from historical calendar transitions.

License change

Following an open period for community feedback that began earlier this year, Hifitime version 4 is now licensed under the Mozilla Public License version 2.0. This change reflects the project's commitment to open-source principles and community collaboration.

What's next for Hifitime?

Looking ahead, Version 4.1 is set to introduce several new time scales, including the recently drafted Lunar Coordinate Time. Special thanks to J-M for providing the specifications that make this possible.

Hifitime version 5 is also on the horizon. This upcoming release aims to enhance precision by extending the representation of durations from nanoseconds down to zeptoseconds, or twelve orders of magnitude smaller than one nanosecond. Additionally, plans to streamline the library by removing cumbersome initializers have been deferred to this major release.

With these updates, Hifitime continues to set the standard for precision time management in scientific and engineering contexts. Whether you're navigating lunar missions or synchronizing satellite communications, Hifitime version 4.0.0 offers unparalleled accuracy and reliability.

blog-post-image

ANISE - Documentation

I'm excited to announce the first release of ANISE's documentation suite, now available in three key components: Tutorials, Explanations, and a detailed Reference section, all structured according to the Diataxis framework. Whether you're new to astrodynamics or looking to deepen your understanding, our tutorials and explanations offer a hands-on approach into that thrilling world above the skies, powered by ANISE's modern capabilities.

The Reference section is the heart of our documentation, featuring the API references for both Python and Rust, alongside a comprehensive mathematical specification for orbital element computations (Keplerian, geodetic, and more). This ensures that users not only have access to powerful tools but also the knowledge to apply them effectively in designing groundbreaking missions. While I'm still working on the How-Tos, this suite is an important step towards making complex astrodynamics accessible to a broader audience, and I'm eager for your feedback.

By adopting a community-driven approach, we aim to democratize spaceflight dynamics, making it as open and accessible as academic research. This marks a significant step in our mission to empower flight dynamics engineers with the tools and knowledge to focus on mission uniqueness, pushing the boundaries of what's possible in space exploration.

blog-post-image

ANISE - version 0.3.0

After nearly two years of dedicated development, I am proud to announce the release of ANISE version 0.3.0, a significant milestone in our journey to reimagine SPICE with modern capabilities. This latest version, available in both Rust and Python, marks a new era in astrodynamics computations, embodying our commitment to open-source innovation.

To facilitate your journey with ANISE, I have prepared comprehensive tutorials, which you can find directly on this website. For an enhanced learning experience, I recommend viewing these tutorials on Github. Designed with practical goals and exercises, they are tailored to help you seamlessly integrate ANISE into your Python-based projects.

For in-depth information on the validation of this toolkit, please visit the dedicated ANISE page on our website. It's crucial to us that our users have confidence in the reliability and accuracy of ANISE.

As of this publication, I am actively addressing three known bugs in ANISE. I encourage you to track our progress and contribute on Github. Transparency and community collaboration are cornerstones of our development process.

ANISE's deployment in mission-critical analysis underscores its robustness and reliability. I am committed to prompt maintenance, ensuring that any reported bugs are swiftly resolved. I invite you to incorporate ANISE into your projects, and I am personally available to assist with feature requests or guidance on using the toolkit. Your feedback and experiences are invaluable to us, and I eagerly anticipate your thoughts and contributions to the ANISE community.