Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
The First IoT JSR: Units of Measurement
JSR-363 [TBW-1406]
Leonardo Lima...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
The First IoT JSR: Units of Measurement
Leonardo Lima
•Computer engineer...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
The First IoT JSR: Units of Measurement
Otávio Santana
•Software enginee...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
What are Units of Measurement?
10,363 ??????
A Measurement
A Unit
San Jo...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
What is the problem, in code?
int distance = 10_363; //in ???
float spee...
@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne
LEARNING FROM THE PAST…
S...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
Some real-life mishaps…
NASA “Star Wars” Initiative, 1985
Sea Level
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
2001: Escape of the 250Kg tortoise
Los Angeles Zoo lent Clarence, a 250-...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
Why do we need a specification?
There are no specifications or standards...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
What is JSR-363?
Interfaces and abstract classes supporting unit operati...
@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne
CORE THEORY AND CONCEPTS
...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
What is a Unit?
c. (a) Any determinate quantity, dimension, or magnitude...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
A Standard Measurement …
“The nice thing about standards is that you hav...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
Dimension
Allows analysis of a quantity by the rational powers of the 7
...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
Quantity
A physical attribute of a thing. Something that can be measured...
@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
What is the problem, in code?
int distance = 10_363; //in ???
float spee...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
What is JSR-363, in code?
Airplane airplane = new Airplane(“A380”);
Quan...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
JSR-363 in IoT
IoT is all about measurements (and timestamps and sensor ...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
JSR-363 in IoT
Before:
After:
public class ThermometerReading extends Me...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
Who is going to use JSR-363?
Java developers who work with physical quan...
@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
JSR-363 timeline
March 11, 2014: Submitted
April 7, 2014: Creation appro...
@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne
Links to JSR-363
Public mailing list(s) and/or forum(s)
Units-Dev on Goo...
@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne
@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne
Upcoming SlideShare
Loading in …5
×

JSR363 - Devoxx US

8,784 views

Published on

Newest (and last?) presentation about JSR363 we did in Devoxx US 2017

Published in: Technology
  • Be the first to comment

  • Be the first to like this

JSR363 - Devoxx US

  1. 1. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne The First IoT JSR: Units of Measurement JSR-363 [TBW-1406] Leonardo Lima & Otávio Santana @leomrlima & @otaviojava & @UnitAPI https://www.jcp.org/en/jsr/detail?id=363 http://unitsofmeasurement.github.io
  2. 2. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne The First IoT JSR: Units of Measurement Leonardo Lima •Computer engineer, server & embedded SW developer •From São Paulo, Brasil, now in Austin, TX •CTO at •Spec Lead – JSR363 – Units of Measurement •V2COM’s Representative at JCP Executive Committee [www.linkedin.com/in/leomrlima]
  3. 3. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne The First IoT JSR: Units of Measurement Otávio Santana •Software engineer, Tomitribe •From Salvador, Brazil •Java Champion, SouJava JUG Leader •Apache and OpenJDK Committer •JSR 363 Expert Group member •Representative at JCP EC for SouJava [about.me/otaviojava]
  4. 4. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne What are Units of Measurement? 10,363 ?????? A Measurement A Unit San Jose São Paulo
  5. 5. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne What is the problem, in code? int distance = 10_363; //in ??? float speed = airplane.getSpeed(); //in ??? System.out.println(“TTD: “ + (distance/speed) + “ hours”); 10,363 ?????? A Measurement A Unit
  6. 6. @YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne LEARNING FROM THE PAST… Some examples of how things can go wrong…
  7. 7. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne Some real-life mishaps… NASA “Star Wars” Initiative, 1985 Sea Level
  8. 8. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne 2001: Escape of the 250Kg tortoise Los Angeles Zoo lent Clarence, a 250-kilogram, 75- year-old Galapagos tortoise, to the Exotic Animal Training and Management Program at Moorpark College in Moorpark CA. The first night in his new home, Clarence wrecked it: “He just pushed one of the fence poles right over,” said Moorpark's Chuck Brinkman. The L.A. Zoo warned that Clarence was big, and needed an enclosure for an animal that “weighs in at about 250”, so that's what the college built. Unfortunately, they thought the zoo meant 250 pounds, so the enclosure wasn't adequate for holding a 250-kilogram (552 lbs) beast. Clarence
  9. 9. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne Why do we need a specification? There are no specifications or standards for handling units in Java. The current solution is to use primitives, that don’t provide any Type Safety. The errors are difficult to find using unit testing: Interface and Internationalization (e.g. radian/degree, meters/feet); Arithmetic operations (e.g. overflow); Conversion between units (e.g. from same domain);
  10. 10. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne What is JSR-363? Interfaces and abstract classes supporting unit operations including: Checking of unit compatibility; Expression of measurement in various units; and Arithmetic operations on units. Concrete classes implementing standard unit types (base, derived) and unit conversion.
  11. 11. @YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne CORE THEORY AND CONCEPTS Some Basic Science behind the API
  12. 12. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne What is a Unit? c. (a) Any determinate quantity, dimension, or magnitude adopted as a basis or standard of measurement for other quantities of the same kind and in terms of which their magnitude is calculated or expressed. Oxford English Dictionary Or … A well defined standard we all know? Unit Definition Second The duration of 9,192,631,770 periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of caesium 133 atom Kilogram The mass of the international prototype kilogram [a very special lump of metal] metre The distance travelled by light in a vacuum in 3.3356409519815204957557671447492e-9 seconds
  13. 13. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne A Standard Measurement … “The nice thing about standards is that you have so many to choose from.” Andrew S. Tanenbaum, Computer Networks 2nd ed., p. 254 Foot Mile Yard Chain Fathom Furlong InchNautical Mile Statute Mile astronomical unit (AU) Light year Parsec(or meter) Passus (roman) Hand ångström Scots/Welsh/English Mile Metre fermi micron Thou (or mil)League rod/perch/pole nail Barleycorn link ell Cubitfinger palm Poppyseed Milli Centi Kilo
  14. 14. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne Dimension Allows analysis of a quantity by the rational powers of the 7 fundamental dimensions (quantities are compatible when they have the same dimensions): length (L), mass (M), time (T), electric charge (I), absolute temperature (Θ), amount of substance (N) and luminous intensity (J) Examples: Speed = length/time - it’s dimensions are L=1,T=-1 (rest 0) (e.g. metre/second - ms-1) Acceleration is speed/time (m/s/s or ms-2) L=1, T=-2 Force is mass x acceleration M x ((length/time)/time) or M=1, L=1, T=-2 Molar Entropy: M=1 L=2 T=−2 Θ=−1 N=−1 (trust me!)
  15. 15. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne Quantity A physical attribute of a thing. Something that can be measured and has units. Compatible quantities have the same dimension… Examples: • Time • Length • Speed • Amount of Substance • Luminous Intensity • Volume • Mass • Force • Power • Electrical Current • Magnetic Flux Density • Volumetric Flow Rate • Fuel Economy* • Percentage • Eggs per carton • Sheep per hour • Bits and bytes … … ∞
  16. 16. @YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne
  17. 17. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne What is the problem, in code? int distance = 10_363; //in ??? float speed = airplane.getSpeed(); //in ??? System.out.println(“TTD: “ + (distance/speed) + “ hours”); 10,363 ?????? A Measurement A Unit
  18. 18. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne What is JSR-363, in code? Airplane airplane = new Airplane(“A380”); QuantityFactory<Length> lengthFactory = provider.getQuantityFactory(Length.class); Quantity<Length> distance = lengthFactory.create(10_363, KILO(METRE)); Quantity<Speed> airplaneSpeed = airplane.getSpeed(); Quantity<Time> timeToDest = distance.divide(airplaneSpeed) .asType(Time.class); System.out.println(“TTD: “ + timeToDest.to(HOUR)); TTD: 11.033853606779548 h
  19. 19. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne JSR-363 in IoT IoT is all about measurements (and timestamps and sensor ID). Before JSR-363, we’d code against primitives: Double, Float, BigDecimal. With JSR-363, you can make your API typesafe and avoid bugs due to lack of consistency or misundertandings.
  20. 20. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne JSR-363 in IoT Before: After: public class ThermometerReading extends Measurement { private Float temperature; } public class ThermometerReading extends Measurement { private Quantity<Temperature> temperature; }
  21. 21. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne Who is going to use JSR-363? Java developers who work with physical quantities need to handle measurements in their programs. Inadequate models of physical measurements can lead to significant programmatic errors. Platform providers and developers can provide and use a better defined API Embedded developers can have less error-prone, more self- documented code
  22. 22. @YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne
  23. 23. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne JSR-363 timeline March 11, 2014: Submitted April 7, 2014: Creation approved Dec 2014 – Jan 2015: Early Draft (approved) Nov 2015 – Jan 2016: Public Review (approved) Q3/2016 : Final Draft Q3/2016: Final Release
  24. 24. @leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne Links to JSR-363 Public mailing list(s) and/or forum(s) Units-Dev on Google Groups Units-Users on Google Groups The JSR page on JCP.org… And two other “JSR project websites”: Main project website is on GitHub (unitsofmeasurement) Java.net site is used for JIRA (deprecated, use GitHub!) And you can get sample code at our GitHub.
  25. 25. @YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne
  26. 26. @YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne

×