OpenChain @ LF Japan Executive Briefing - May 2024
How JSR 385 Could have Saved the Mars Climate Orbiter JCON September 2019
1. How JSR-385 could have
Saved the Mars Climate
Orbiter
Werner Keil & Thodoris Bais
@thodorisbais@wernerkeil
2. Werner Keil Thodoris Bais
Spec Lead JSR-385 Expert Group Member JSR-385
Let’s meet
@thodorisbais@wernerkeil
3. Mars Climate
Orbiter
• Launched on 11
December 1998
• 338 kilograms
• $125 millions
• To study Martian
climate, atmosphere
and surface changes
@thodorisbais@wernerkeil
4. 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
5. More unit mishaps
• The 12 October 1492 “mishap”
• “Gimli Glider”, 1983
• Air Canada flight 143
• Received less than half the fuel needed
• Clarence the Tortoise, 2001
• A whole set of medication dose errors
@thodorisbais@wernerkeil
7. What is the Fundamental
Problem?
Primitive (Java) types are primitive types
@thodorisbais@wernerkeil
8. 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
9. Rolling your Own Library
• Development
• Maintenance
• Upgrades & extensions
@thodorisbais@wernerkeil
11. JSR-385: Units of Measurement API 2.0
Description
This JSR is a major evolution of the Unit API 1.0 (JSR 363) specification. Focused
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
12. JSR-385 Basic Concepts
• Dimensions
• Units
• Quantities
• Prefixes
• Converters
• Formats
• Systems of units
@thodorisbais@wernerkeil
14. Write a program to calculate the BMI of a person
Exercise description
BMI is a person's weight in kilograms (kg) divided by his or her height in meters squared
@thodorisbais@wernerkeil
15. Setting up a project
<dependencies>
<dependency>
<groupId>tech.units</groupId>
<artifactId>indriya</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
@thodorisbais@wernerkeil
17. –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
18. Speed of Light
c = 299,792,458 m/s
Value Unit
@thodorisbais@wernerkeil
19. –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
20. Speed of Light
c = 299,792,458 m/s
= 1,079,252,849 km/h
@thodorisbais@wernerkeil
21. 1. Define two quantities
a. A mass
b. A length
2. Print them out
Exercise Time
@thodorisbais@wernerkeil
22. •Divide the mass by the square of the height
•Print out the result
Exercise Time
@thodorisbais@wernerkeil
23. •Parse mass and height from a String
Exercise Time
@thodorisbais@wernerkeil
24. •Read mass and height from the command line
Exercise Time
@thodorisbais@wernerkeil
31. 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
37. JCON School
September 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
38. JCON School
September Exam on Maths
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
39. JCON School
September Exam on Maths
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
40. JCON School
September Exam on Maths
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
41. JCON School
September Exam on Maths
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
42. JCON School
September Exam on Maths
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
43. JCON School
September Exam on Maths
Powers
Units
•(m)2 = m2
•(km)2 = km2
•(m2)2 = m4
Quantities
• (3 m)2 = 9 m2
•
@thodorisbais@wernerkeil
44. JCON School
September Exam on Maths
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
45. 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
46. 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
48. What Was the Fundamental
Problem Again?
Primitive (Java) types are primitive types
@thodorisbais@wernerkeil
49. 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
50. –https://www.jcp.org/en/participation/overview
“The JCP gives you a chance to have your own work become an official component of
the Java platform and to offer suggestions for improving and growing the technology.
Either way, everyone in the Java community benefits from your participation. That's one
of the reasons the JCP is open to everyone.”
–https://www.jcp.org/en/participation/membership
“Membership in the JCP offers you a chance to become a permanent part of the Java
platform's history by contributing your work and recommendations to the various
standard specifications, and/or a chance of serving on the Executive Committee.”
The Java Community Process
@thodorisbais@wernerkeil