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 oļ¬ 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) speciļ¬cation. Focussed
on the SI System redeļ¬nition, modularity and support for Java SE 8/9 and above.
JSR 363
This JSR speciļ¬es Java packages for modelling and working with measurement
values, quantities and their corresponding units.
@thodorisbais@wernerkeil
16. JSR-385 Basic Concepts
ā¢ Dimensions
ā¢ Units
ā¢ Quantities
ā¢ Preļ¬xes
ā¢ 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 quantiļ¬ed 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.ā
Deļ¬nition 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 quantiļ¬ed 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.ā
Deļ¬nition 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
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