4. Mars Climate
Orbiter
• Launched on 11
December 1998
• 338 kilograms
• $125 millions
• To study Martian
climate, atmosphere
and surface changes
@wernerkeil @thodorisbais
8. 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
12. 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;
@thodorisbais@wernerkeil
static final Quantity<SPEED> SPEED_OF_LIGHT =
Quantities.getQuantity(1079252849, Units.KILOMETRE_PER_HOUR);
13. Rolling your Own Library
• Development
• Maintenance
• Upgrades & extensions
@thodorisbais@wernerkeil
14. Werner Keil Thodoris Bais
Maintenance Lead JSR-385
Expert Group Member JSR-385
Let’s meet
@thodorisbais@wernerkeil
15. @thodorisbais@wernerkeil
ABN Amro Bank
Financial sector
Amsterdam
Agile organization
20,000
3000+
400+
Total number of employeesEnterprise bank
Headquarters Development Teams
DevOps / Hybrid cloud Applications
21. –Wikipedia
“A physical quantity is a physical property of a phenomenon, body, or
substance, that can be quantified by measurement.”
Definition of a Physical Quantity
@thodorisbais@wernerkeil
22. Speed of Light
c = 299,792,458 m/s
Value Unit
@thodorisbais@wernerkeil
23. Speed of Light
c = 299,792,458 m/s
= 1,079,252,849 km/h
@thodorisbais@wernerkeil
29. 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. Systems of UnitSystems of Units
• Metric System
• Imperial System
• US customary units
• Roman units of measurement
• Norwegian Units of Measurement
@thodorisbais@wernerkeil
36. Java Global Summit Math Exam
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
37. 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
Java Global Summit Math Exam
38. 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
Java Global Summit Math Exam
39. How much is 0 °C + 0 °C?
Answer
@thodorisbais@wernerkeil
Java Global Summit Math Exam
43. Write a program to calculate the BMI of a person
Exercise description
@thodorisbais@wernerkeil
44. 1. Define two quantities
a. A mass
b. A length
2. Print them out
Useful classes:
•tech.units.indriya.quantity.Quantities
•getQuantity(java.lang.Number value, javax.measure.Unit unit)
•tech.units.indriya.unit.Units
•javax.measure.Quantity
•javax.measure.quantity.Mass
Exercise 1
@thodorisbais@wernerkeil
45. • Divide the mass by the square of the height
• Print out the result
Exercise 2
@thodorisbais@wernerkeil
46. a. Parse mass and height from a String
b. Read mass and height from the command line
Exercise 3
@thodorisbais@wernerkeil
47. a. Define a BMI quantity
b. Define a BMI unit
c. Convert the quantity to the BMI unit before printing it out
Exercise 4
@thodorisbais@wernerkeil
48. • Autodetect which argument has mass dimension and which one
has length
Exercise 5
@thodorisbais@wernerkeil
49. What was the Fundamental
Problem Again?
Primitive (Java) types are primitive types
@thodorisbais@wernerkeil
Late 1999 - David Bowie – small-scale promotional concert tour known as the Hours Tour with the opening song of the setlist having the name “Life on Mars 1999”
Primary science objectives of the mission:
determine the distribution of water in Mars
monitor the daily atmospheric conditions
record changes of the Martian surface (due to wind)
determine temperature profiles in the atmosphere
look for evidence of past climate change
This picture costed $125 millions dollars
into a trajectory above 226km above the surface of Mars
It probably got disintegrated in the atmosphere and disappeared.
Minimum altitude to survive was 80km above the surface of Mars
A piece of software provided by Lockheed Martin produced results for the total impulse by the thruster firing in pound force seconds, whereas the trajectory calculation software provided by NASA expected it to be in Newton seconds.
The software specification said it should have been in Newton seconds so Luckheed Martin clearly made a mistake
if Lockheed Martin had done a good job, it would have never happened
Use JSR-385 instead of primitives
Fail fast <== don’t rely on the checksum balancer to discover problems
The 12 October 1492 “mishap”Colombus miscalculated the circumference of the earth cuz he used roman miles instead of nautical miles. ended up in Bahamas, but thought he was in Asia. Consequence? the native americans were called for Indians 500 years afterwards
2) Clarence the Tortoise, 2001 , Galapagos tortoise
Los Angeles Zoo loaned to Moorpark College.
“Build an enclosure for an animal that weighs in at about 250”
Forgot to say “kilograms” . so Moorpark college built one for a 250 pound tortoise. Guess what happened the first night. Clarence wrecked the cage
3) units begging for mistakes —> Tea spoon . gram and grain “take 5 grains” is being understood as “take 5 grams”
4) SDI measurement problem (SDI was Reagan's Space Force) where the Space Shuttle turned upside down
using a primitive to represent a quantity is fundamentally conflicting with OOP and DDD, cuz you’re using a type representing just a number to represent a quantity which has a unit
—-
built in into the property and it contains both the value and the unit
—-
No way to misinterpret the SPEED of light at the bottom as that number in km/h
wanna do it properly? define ur own library
how difficult can it be? it’s just a value and a unit
lot of work —> many units
meter, time units, electrical resistance , TEMPERATURES?, divide & multiply
Are you a UoM domain expert? so even if you use the SI system every day do you really understand how it works? TBH I didn’t even answer that question to myself. I would be surprised if you know all the peculiarities around SI.
There is a number of strange things, even though it is designed as the rational system as compared to some other systems.
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.
Dimensions: length
Unit: metre
Quantity: 5 metres
prefixes: kilo, milli, etc.
converters: km/h —> m/s or mph
formatting: print out the quantity and parse the quantity of the unit
systems of units: metric, imperial and handle them in a good way
It doesn’t do some kinds of optimisations that one could think it would be nice to have
Let’s start by defining a number of quantities and try to print them out.
Yesterday I travelled 1.6Mm???
1hour = 3.6ks, but “come back in 1ks”???
You need 1 for the angle for example so that you can handle the absence of dimension
Should you have functions to normalize expressions into what could be closer to the base unit
That’s something you could consider, and also for quantities for example that 1 mg per mm-2 is automatically normalized to 1kg m-2
Special paint for small devices
It’s not just about comparing the values and the units
you have to convert to one unit
and do the comparison in one reference unit
We use the 1st unit if we can
If it leads to an overflow, we can fall back to the second unit
Otherwise, if it leads to an overflow in both units, we just throw an overflow error
THAT’S EASY! RIGHT?
There are thermodynamic parameters when you want to add temperatures
All 3 answers are correct depending on the situation.
absolute or relative quantity? We hadn’t modelled this.
So, again, are you a domain expert in ur system? Do you really know the SI system so that you can write a library to handle this stuff?
Why are we using degrees celsius. Undoubtedly, it’s easy (0-100 degrees), but degrees celsius is not such a good unit to measure temperature.
JavaZone example with Time (i.e. day light, saving time, etc., formatting problem with US month – dd - yyyy, countries using F and celsius)
kg/m^2
a thing that matters for the BMI index is to express the units as kilograms and meters and not cm for example.
We’ll see as we go through th exercise that we can handle that in a good way
So you see? this is not difficult to do, so instead of defining an Integer to hold 75 as the mass, that’s not much of simplification compared to this