The document discusses the Mars Climate Orbiter mission that failed in 1999 due to a discrepancy in measurement units. It suggests that using JSR-385, the Java Specification Requests Units of Measurement API, could have prevented this failure by catching the unit mismatch. JSR-385 provides a standard library for working with quantities, units, and unit conversions that avoids issues with primitive types representing values with implicit units. The document promotes JSR-385 and its role in avoiding measurement errors through proper handling of units.
How JSR 385 could have Saved the Mars Climate Orbiter JFall 2019
1. How JSR-385 could have
Saved the Mars Climate
Orbiter
Werner Keil & Thodoris Bais
#jfall19
@thodorisbais@wernerkeil
2. Mars Climate
Orbiter
• Launched on 11
December 1998
• 338 kilograms
• $125 millions
• To study Martian
climate, atmosphere
and surface changes
@thodorisbais@wernerkeil
6. Mars Climate Orbiter
“The problem here was not the error; it was the
failure of NASA’s systems engineering, and the
checks and balances in our process, to detect the
error. That’s why we lost the spacecraft.”
Edward Weiler
NASA associate administrator of space science,
IEEE Spectrum: Why the Mars Probe went off course
@thodorisbais@wernerkeil
10. What is the Fundamental
Problem?
Primitive (Java) types are primitive types
@thodorisbais@wernerkeil
11. What is the Fundamental Problem?
Primitive (Java) types are primitive types
• static final double C = 1079252849;
• static final double SPEED_OF_LIGHT = 1079252849;
• static final double SPEED_OF_LIGHT_IN_KM_PER_H = 1079252849;
static final Quantity<SPEED> SPEED_OF_LIGHT =
Quantities.getQuantity(1079252849, Units.KILOMETRE_PER_HOUR);
@thodorisbais@wernerkeil
12. Rolling your Own Library
• Development
• Maintenance
• Upgrades & extensions
@thodorisbais@wernerkeil
13. Werner Keil Thodoris Bais
Spec Lead JSR-385 Expert Group Member JSR-385
Let’s meet
@thodorisbais@wernerkeil
15. JSR-385: Units of Measurement API 2.0
Description
This JSR is a major evolution of the Unit API 1.0 (JSR 363) specification. Focussed
on the SI System redefinition, modularity and support for Java SE 8/9 and above.
JSR 363
This JSR specifies Java packages for modelling and working with measurement
values, quantities and their corresponding units.
@thodorisbais@wernerkeil
16. JSR-385 Basic Concepts
• Dimensions
• Units
• Quantities
• Prefixes
• Converters
• Formats
• Systems of units
@thodorisbais@wernerkeil
18. –Wikipedia
“A physical quantity is a physical property of a phenomenon, body,
or substance, that can be quantified by measurement.”
–Ibidem
“A physical quantity can be expressed as the combination of a
magnitude expressed by a number - usually a real umber - and a
unit.”
Definition of a Physical Quantity
@thodorisbais@wernerkeil
19. Speed of Light
c = 299,792,458 m/s
Value Unit
@thodorisbais@wernerkeil
20. –Wikipedia
“A physical quantity is a physical property of a phenomenon, body, or substance,
that can be quantified by measurement.”
“A physical quantity can be expressed as the combination of a magnitude
expressed by a number - usually a real umber - and a unit.”
Definition of a Physical Quantity
–Ibidem
“The same physical quantity can be represented equivalently in many unit
systems.”
@thodorisbais@wernerkeil
21. Speed of Light
c = 299,792,458 m/s
= 1,079,252,849 km/h
@thodorisbais@wernerkeil
27. Dimensions
• L: length
• T: time
• M: mass
• I: electric current
• Θ: thermodynamic temperature
• N: amount of substance
• J: luminous intensity
• (1)
Force: L · M · T-2
@thodorisbais@wernerkeil
32. JFall School 2019
October Exam on Maths
How much is 0 °C + 0 °C?
• 0 °C
• 0 °C
• 273.15 °C
Two absolute temperatures
0 °C + 0 °C = 273.15K + 273.15K
= 546.30K
= 273.15 °C
@thodorisbais@wernerkeil
33. How much is 0 °C + 0 °C?
• 0 °C
• 0 °C
• 273.15 °C
An absolute temperature and a temperature change
0 °C + 0 °C = 273.15K + 0K
= 273.15K
= 0 °C
@thodorisbais@wernerkeil
JFall School 2019
October Exam on Maths
34. How much is 0 °C + 0 °C?
• 0 °C
• 0 °C
• 273.15 °C
Two temperature changes
0 °C + 0 °C = 0K + 0K
= 0K
= 0 °C
@thodorisbais@wernerkeil
JFall School 2019
October Exam on Maths
35. How much is 0 °C + 0 °C?
273.15 °C (546.30 K)
0 °C + 0 °C = 0 °C (273.15 K)
0 °C (0 K)
Answer
@thodorisbais@wernerkeil
JFall School 2019
October Exam on Maths
36. Multiplication
Units
•kg × m = kg·m
•kg × mm = kg·mm
•g × km = g·km ≟ kg·m
•m × m = m2
•km × km = km2
•mm × km = mm·km ≟ m2
•µm × m = µm·m ≟ mm2
Quantities
•2 kg × 3 m = 6 kg·m
@thodorisbais@wernerkeil
JFall School 2019
October Exam on Maths
37. Division
Units
•kg / m = kg·m-1
•kg / mm = kg·mm-1
•g / mm = g·mm-1 ≟ kg·m-1
•m2 / m = m
•m / m = 1
•km / km = 1
•km / m = km/m ≟ 1k
Quantities
• 3 kg / 2 m = 1.5 kg·m-1
@thodorisbais@wernerkeil
JFall School 2019
October Exam on Maths
38. Powers
Units
•(m)2 = m2
•(km)2 = km2
•(m2)2 = m4
Quantities
• (3 m)2 = 9 m2
•
@thodorisbais@wernerkeil
JFall School 2019
October Exam on Maths
39. Celsius Revisited
Units
•(K)2 = K2
•(°C)2 ≟ (K - 273.15)2
•m × °C ≟ m·(K - 273.15)
Quantities
•0 °C2 ≟ 74,610.9225 K2
•1 m°C ≟ 1 mK or 273.151K
@thodorisbais@wernerkeil
JFall School 2019
October Exam on Maths
40. Parsing Units & Quantities
•299,792,458 m/s
•299792458 m/s
•299792.458 km/s
•299,792.458 km/s
•299,792,458 km*s-1
• 299,792.458 km×s-1
•299,792.458 km·s-1
•299,792.458 km·s⁻¹
•299,792.458 km*s^-1
•1,079,252,849 km/h
•1,079,252,849 km/t
• 670,616,629 mph
Speed of Light
@thodorisbais@wernerkeil
41. Systems of Unit
Systems of UnitSystems of Unit
• Metric System
• Imperial System
• US customary units
• Roman units of measurement
•Norwegian Units of Measurement
@thodorisbais@wernerkeil
43. What Was the Fundamental
Problem Again?
Primitive (Java) types are primitive types
@thodorisbais@wernerkeil
44. Setting up a project
<dependencies>
<dependency>
<groupId>tech.units</groupId>
<artifactId>indriya</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
@thodorisbais@wernerkeil
45. JSR-385 Current Status
• JCP page
• https://jcp.org/en/jsr/detail?id=385
• GitHub repositories
• https://github.com/unitsofmeasurement
• Current status
• Final Release
@thodorisbais@wernerkeil