eclipse uomo
DESCRIPTION
Developers who work with physical quantities (e.g. in scientific, engineering, medical, manufacturing domains or general business) need to be able to handle measurements of these quantities in their programs.TRANSCRIPT
![Page 1: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/1.jpg)
Eclipse UOMo
Units of Measurement Support for Java and OSGi
© 2007-2011 Creative Arts & Technologies
Werner Keil
Eclipse Birthday DemoCamp Kaiserslautern
November 24th, 2011
![Page 2: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/2.jpg)
Emphasis
Most of today’s technologies including the Java Language so far lack support for common non-trivial Arithmetic problems like Unit Conversions.
3 © 2007-2011 Creative Arts & Technologies
![Page 3: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/3.jpg)
Overview
•Present Situation• Historic IT Errors and Bugs• Cause of Conversion Errors
•Proposed Changes• Type Safety
•Unit Frameworks• History
• Features, Pros and Cons
•UOMo• Overview, UCUM, Business
•Demo•Q&A
4 © 2007-2011 Creative Arts & Technologies
![Page 4: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/4.jpg)
What do these disasters have in common?•Patriot MissileThe cause was an inaccurate calculation of the time since boot due to a computer arithmetic error.
•Ariane 5 ExplosionThe floating point number which a value was converted from had a value greater than what would be represented by a 16 bit signed integer.
5 © 2007-2011 Creative Arts & Technologies
![Page 5: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/5.jpg)
• Gimli Glider (near disaster)Fuel loading was miscalculated through misunderstanding of the recently adopted Metric System, replacing the Imperial System
• Mars Orbiter Preliminary findings indicate that one team used English units (e.g. inches, feet and pounds) while the other used metric units for a key spacecraft operation.
• NASA lost a $125 million Mars orbiter because a Lockheed Martin engineering team used English units of measurement while the agency's team used the more conventional metric system for a key spacecraft operation
• This also underlines the added risk when 3rd party contractors are involved or projects are developed Offshore
What do these disasters have in common?
6 © 2007-2011 Creative Arts & Technologies
![Page 6: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/6.jpg)
23rd March 1983. Ronald Reagan announces SDI (or “Star Wars”): ground-based and space-based systems to protect the US from attack by strategic nuclear ballistic missiles.
NASA “Star Wars” Initiative, 1983
![Page 7: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/7.jpg)
1985
Mirror on underside of shuttle
SDI Experiment: The Plan
Big mountain in Hawaii
![Page 8: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/8.jpg)
1985
SDI Experiment: What really happened
![Page 9: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/9.jpg)
1985: What happened?
![Page 10: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/10.jpg)
NASA Mars Climate Orbiter, 1999
![Page 11: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/11.jpg)
Unit Tests wouldn‘t find these…
•All previous example illustrate three categories of errors difficult to find through Unit Testing:
• Interface Errors (e.g. millisecond/second, radian/degree, meters/feet).
• Arithmetic Errors (e.g. overflow).
• Conversion Errors.
13 © 2007-2011 Creative Arts & Technologies
Despite their name
![Page 12: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/12.jpg)
Causes of Conversion Errors
•Ambiguity on the unit• Gallon Dry / Gallon Liquid
• Gallon US / Gallon UK
• Day Sidereal / Day Calendar
• ...
•Wrong conversion factors:static final double PIXEL_TO_INCH = 1 / 72;
double pixels = inches * PIXEL_TO_INCH
14 © 2007-2011 Creative Arts & Technologies
![Page 13: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/13.jpg)
Present Situation
•Java does not have strongly typed primitive types (like e.g. Ada language).
•For performance reasons most developer prefer primitive types over objects in their interface.
•Primitives type arguments often lead to name clashes (methods with the same signature)
15 © 2007-2011 Creative Arts & Technologies
![Page 14: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/14.jpg)
Base Classes and Packages
•Namespace: javax.measure.*
•Only one interface and one abstract class• Measurable<Q extends Quantity> (interface)
• Measure<V, Q extends Quantity> (abstract class)
•Three sub-packages• unit (holds the SI and NonSI units)
• quantity (holds dimensions mass, length)
• converter (holds unit converters)
JSR-275
16 © 2007-2011 Creative Arts & Technologies
![Page 15: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/15.jpg)
Units of Measurement API
•Namespace: org.unitsofmeasurement.*
•Only interfaces (and exception classes)• public interface Quantity<Q extends Quantity<Q>>
• public interface Unit<Q extends Quantity<Q>>
•Three sub-packages• quantity (holds dimensions mass, length)
• unit(holds units)
• service (OSGi services)
The King is Dead…
17 © 2007-2011 Creative Arts & Technologies
![Page 16: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/16.jpg)
Results with
Same Dimension Different Dimension
Binary Operations Binary Operations
add(double) or (long) root(int)
multiply(double) or (long) power(int)
divide(double) or (long) multiply(Unit)
compound(Unit) divide(Unit)
Unary Operations
inverse()
Unit-API | Operations
![Page 17: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/17.jpg)
Mobile Sensor API
•Namespace: javax.microediton.sensor*
•Focusing on Sensors, but it got a minimalistic Unit API “in the closet”
• UnitEssentially an SI singleton holding relevant unit constants, too.
• ChannelInfoHolding name, accuracy, data type,measurement ranges, scale and unit
• MeasurementRangeRange of possible values from minimum to maximum
JSR-256
19 © 2007-2011 Creative Arts & Technologies
![Page 18: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/18.jpg)
Sensor States
JSR-256
20 © 2007-2011 Creative Arts & Technologies
![Page 19: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/19.jpg)
Sensor Groups
• Context types categorize sensors into three groups: 1. ambient, sensors measuring some ambient property of the environment
2. device, sensors measuring properties related to the device
3. user, sensors measuring some function of the user
• By using context types, it is possible to find, for example, user-related sensors for fitness, or ambient sensors for smart home controlling. Although the granularity of this level does not qualify the sensors very precisely, still in some cases it provides the way to make the distinction, for example, cf. air thermometer (ambient) / clinical thermometer (user).
JSR-256
21 © 2007-2011 Creative Arts & Technologies
![Page 20: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/20.jpg)
Quantity
• The quantity provides a more precise qualifier. The unit and the quantity has a close relation. Some quantities are listed in tables of Unit class. When the quantity and context type is known, it is often easy to guess the full purpose of the sensor. Some examples are given here:
Quantity: electric_current + context type: ambient = sensor measuring electric current, amperemeter
Quantity: catalytic_activity + contex type: ambient = sensor measuring catalytic activity
JSR-256
22 © 2007-2011 Creative Arts & Technologies
![Page 21: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/21.jpg)
Measurement Package
•Namespace: org.osgi.util.measurement
•SI only Unit API “in the closet”• Unit
Essentially an SI singleton holding relevant unit constants, too.• Measurement
Represents a value with an error, a unit and a time-stamp. • State
Groups a state name, value and timestamp.
OSGi
23 © 2007-2011 Creative Arts & Technologies
![Page 22: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/22.jpg)
DEMO
Unit Frameworks
![Page 23: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/23.jpg)
Eclipse UOMo
One Small Step…
![Page 24: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/24.jpg)
One Unit Framework to Measure them All
•Namespace: org.eclipse.uomo.*
•Two main areas• Static Type Safe Units of Measure Support
• Based on Units of Measurement API
• On top of ICU4J, the Globalization standard at Eclipse and others (Android, GWT, Google Financial, etc.)
• Prime UCUM Implementation• Successor to Eclipse OHF UCUM Bundle
Eclipse UOMo
26 © 2007-2011 Creative Arts & Technologies
![Page 25: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/25.jpg)
Bundles
• UOMo currently consists of• UOMo Core
• General parts of the framework, reusable components
• UOMo Util• Utility classes, Formatting, Date/Time and other ICU4J or Unicode
related items
• UOMo XML• XMLPull and support for Markup Languages like UnitsML, MathML
or SensorML
Eclipse UOMo
27 © 2007-2011 Creative Arts & Technologies
![Page 26: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/26.jpg)
Bundles (2)
• UOMo Units• Based on Units of Measurement API
• UOMo UCUM• Unified Code for Units of Measure support
• UOMo Business• Business Types and Monetary System
Eclipse UOMo
28 © 2007-2011 Creative Arts & Technologies
![Page 27: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/27.jpg)
UOMo Units | System of Units
29 © 2007-2011 Creative Arts & Technologies
![Page 28: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/28.jpg)
Unified Code for Units of Measure
• The Unified Code for Units of Measure is a code system intended to include all units of measures being contemporarily used in international science, engineering, and business. The purpose is to facilitate unambiguous electronic communication of quantities together with their units. The focus is on electronic communication, as opposed to communication between humans. A typical application of The Unified Code for Units of Measure are electronic data interchange (EDI) protocols, but there is nothing that prevents it from being used in other types of machine communication. How does it relate?
UOMo UCUM
30 © 2007-2011 Creative Arts & Technologies
![Page 29: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/29.jpg)
Unified Code for Units of Measure
The Unified Code for Units of Measure is inspired by and heavily based on
• ISO 2955-1983
• ANSI X3.50-1986
• HL7's extensions called ISO+
UOMo UCUM
31 © 2007-2011 Creative Arts & Technologies
![Page 30: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/30.jpg)
DEMO
Eclipse UOMo
![Page 31: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/31.jpg)
Monetary systems are part of UOMo Business. This illustrates, how easily the Units bundle and underlying Unit-API can be extended beyond physical or scientific quantities.
Such extension can be valuable by leveraging the framework’s capabilities (formatting, conversion,…)
and applying its usefulness beyond what e.g. java.util.Currency now has to offer.
UOMo Business | Monetary System
33 © 2007-2011 Creative Arts & Technologies
![Page 32: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/32.jpg)
UOMo Business | Monetary Types
34 © 2007-2011 Creative Arts & Technologies
![Page 33: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/33.jpg)
We’ll extend MoneyDemo to show fuel costs in Indian Rupees.
First by adding a new currency to MonetarySystem.
// Use currency not defined as constant (Indian Rupee).public static final DerivedUnit<Money> INR = monetary(
new Currency(„INR„));
UnitFormat.getInstance().label(INR, „Rp");
Then add this line to MoneyDemo.(also change static import to MonetarySystem.*; )
UOMo Business | Money Demo (1)
35 © 2007-2011 Creative Arts & Technologies
![Page 34: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/34.jpg)
Next set the Exchange Rate for Rp.((Currency) INR).setExchangeRate(0.022); // 1.0Rp = ~0.022 $
Note, the explicit cast is required here, because getUnits() in SystemOfUnits currently requires a neutral <?> generic collection type.
UOMo Business | Money Demo (2)
36 © 2007-2011 Creative Arts & Technologies
![Page 35: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/35.jpg)
Then we add the following line to the “Display cost.” section of MoneyDemoSystem.out.println("Trip cost = " + tripCost + " (" + tripCost.to(INR) + ")");
Trip cost = 87.50 $ (3977.26 Rp)
Resulting in the additional output:
UOMo Business | Money Demo (3)
37 © 2007-2011 Creative Arts & Technologies
![Page 36: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/36.jpg)
What happens, if we use built in java.util.Currency and Standard JSP formats
UOMo Business | Trading Example
38 © 2007-2011 Creative Arts & Technologies
![Page 37: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/37.jpg)
DEMO
UOMo Business
![Page 38: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/38.jpg)
Eclipse – Project UOMo
http://www.eclipse.org/uomo/
Units of Measurement API
http://www.unitsofmeasurement.org
UCUM
http://www.unitsofmeasure.org
Links
![Page 39: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/39.jpg)
Q & ALet‘s talk
![Page 40: Eclipse UOMo](https://reader036.vdocuments.mx/reader036/viewer/2022062319/5583f3e5d8b42a4b058b47ec/html5/thumbnails/40.jpg)
Contact
or
Twitter: @wernerkeil
Hashtag #EclipseUOMo