jsr363 - devoxx us

26
@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

Upload: leonardo-de-moura-rocha-lima

Post on 28-Jan-2018

4.953 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: JSR363 - Devoxx US

@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

Page 2: JSR363 - Devoxx US

@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]

Page 3: JSR363 - Devoxx US

@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]

Page 4: JSR363 - Devoxx US

@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne

What are Units of Measurement?

10,363 ??????A Measurement

A Unit

San Jose

São Paulo

Page 5: JSR363 - Devoxx US

@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

Page 6: JSR363 - Devoxx US

@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne

LEARNING FROM THE PAST…

Some examples of how things can go wrong…

Page 7: JSR363 - Devoxx US

@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne

Some real-life mishaps…NASA “Star Wars” Initiative, 1985

Sea Level

Page 8: JSR363 - Devoxx US

@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

Page 9: JSR363 - Devoxx US

@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);

Page 10: JSR363 - Devoxx US

@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.

Page 11: JSR363 - Devoxx US

@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne

CORE THEORY AND CONCEPTS

Some Basic Science behind the API

Page 12: JSR363 - Devoxx US

@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

Page 13: JSR363 - Devoxx US

@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

MileYard Chain

Fathom

FurlongInchNautical Mile

Statute Mile

astronomical unit (AU)

Light yearParsec(or meter)

Passus (roman)

Hand

ångström

Scots/Welsh/English Mile

Metre fermimicron

Thou (or mil)League

rod/perch/pole

nail

Barleycorn

link

ell Cubitfinger

palm

Poppyseed

Milli Centi Kilo

Page 14: JSR363 - Devoxx US

@leomrlima & @otaviojava & @UnitAPI#JSR363JavaOne

DimensionAllows 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!)

Page 15: JSR363 - Devoxx US

@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 …

… ∞

Page 16: JSR363 - Devoxx US

@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne

Page 17: JSR363 - Devoxx US

@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

Page 18: JSR363 - Devoxx US

@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

Page 19: JSR363 - Devoxx US

@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.

Page 20: JSR363 - Devoxx US

@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;

}

Page 21: JSR363 - Devoxx US

@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

Page 22: JSR363 - Devoxx US

@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne

Page 23: JSR363 - Devoxx US

@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

Page 24: JSR363 - Devoxx US

@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.

Page 25: JSR363 - Devoxx US

@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne

Page 26: JSR363 - Devoxx US

@YourTwitterHandle#DVXFR14{session hashtag} @leomrlima & @otaviojava & @wernerkeil#JSR363JavaOne