lidl interaction description language presentation at fomchi 2015

61
LIDL LIDL Interaction Description Language Vincent Lecrubier ONERA, Toulouse

Upload: vincent-lecrubier

Post on 16-Apr-2017

304 views

Category:

Software


0 download

TRANSCRIPT

LIDLLIDL Interaction Description Language

Vincent LecrubierONERA, Toulouse

Contents

Why

What

How

Why

What

How

Context

Critical UIs

Formal proof

Static analysis

B Method

Petri nets

State machines

Model checking

Extensive testing

Usability analysis

User experience

Look & Feel design

Human factors

Prototyping

Critical Systems User Interfaces

Long development cycles Short development cycles

Proven technologies New modalities

Context

Definition

Specification

Implementation

Verification

Validation

Prototyping

Testing

Model CheckingFormalization

Prototype

Code

Runtime

Code

Textual

Spec.

Test

Cases

High

Level

Definition

Test

Cases

Runtime

Code

High

Level

Rqmts.

Textual

Spec.

Model

Checking

Code

Safety

Properties

Textual

Spec.

Need Solution

Context

Prototype

Code

Runtime

Code

Textual

Spec.

Test

Cases

High

Level

Definition

Test

Cases

Runtime

Code

High

Level

Rqmts.

Textual

Spec.

Model

Checking

Code

Safety

Properties

Textual

Spec.

Need Solution

Interactive systems

Interactive systems

B

C

A

D

Interactive systems

Data

Interactive systems

Data

Computation

Interactive systems

Data

Computation

Interaction

Interactive systems

Data

Computation

Interaction

XML, JSON, CSV, HTML, SQL…

C, Lisp, Java, ML, Javascript, Lustre…

?

Computation vs Interaction

Computation vs Interaction

Result

Parameters

Computation vs Interaction

Result

Parameters

Compound interaction

Simple interactions

Why

What

How

LIDL

LIDL code

C codeJS code

LIDL Programs structure

LIDL Programs structure

data TheDataType is …

LIDL Programs structure

data TheDataType is …

interface TheInterfaceis …

LIDL Programs structure

data TheDataType is …

interface TheInterfaceis …

interaction (say (something:Text in) to (someone:Text out)):Activation inis …

Data types

Data types

data Squaredata Cylinderdata Pentagondata Triangle

Data types

data Squaredata Cylinderdata Pentagondata Triangle

data MyCompoundType is { redSquare : Square, greenPentagon : Pentagon, yellowTriangle : Triangle, blueCylinder : Cylinder }

Interfaces

Interfaces

Interfaces

interface Example is { redSquares : Square in, greenPentagons : Pentagon in, yellowTriangles : Triangle out, blueCylinders : Cylinder out }

Interaction

Interactioninteraction (turn (thing: Color out) red): Activation inis ((thing)=({red:(255),green:(0),blue:(0)}))

Interactioninteraction (turn (thing: Color out) red): Activation inis ((thing)=({red:(255),green:(0),blue:(0)}))

()=()

thing {…}

255 0 0

Interaction

()=()

thing {…}

255 0 0

()=()

thing

{…}

255 0 0

interaction (turn (thing: Color out) red): Activation inis ((thing)=({red:(255),green:(0),blue:(0)}))

Syntax

Syntax

C, Java computeBMI(83,185)

Syntax

C, Java computeBMI(83,185)

Javascript computeBMI({weight:83,height:185})

Syntax

C, Java computeBMI(83,185)

Javascript computeBMI({weight:83,height:185})

C#, Swift computeBMI(weight:83,height:185)

Syntax

C, Java computeBMI(83,185)

Javascript computeBMI({weight:83,height:185})

C#, Swift computeBMI(weight:83,height:185)

LIDL (BMI of someone who weights (83)kg and is (185)cm high)

Synchronous execution

Synchronous execution

Synchronous execution

4 ~~3 ~12 3 ~

~5 2~ ~5~ 22~ ~3

~5342 ~

squaretrianglepentagon

Everything is an interaction

Everything is an interaction

((x)=(5))

Everything is an interaction

((x)=(5))

()=()

x 5

Everything is an interaction

((x)=(5))

()=()

x 5

()=()

x

5

Everything is an interaction

((both(x)and(y))=((5)+(3)))

()=()

x

()+()both()and()

y 5 3

()=()

x

()+()

both()and()

y

5 3

Base interactions

({x()y()})

Composition/Decomposition

Selection/Deselection

(().x)

Previous

(previous())

Function application

(()in()()=())

Composition/Decomposition

({x(5)y(6)})

Composition

{x()y()}

5 3

({x(a)y(b)})

Decomposition

{x()y()}

a b

65

{x:5,y:6} {x:5,y:6}

65

Selection/Deselection

((mypoint).x)

Selection

().x

mypoint

((mypoint).x)

Deselection

().x

mypoint

{x:5,y:6}

5

{x:5}

5

Previous

(previous(x))

previous()

x

previous()

x

previous()

x

previous()

x

previous()

x

Function application

((a)in(sin)(x)=(y))

()in()() =()

a x

pi5

sin y

5

sin 0

Function application

((y)in(sin)(x)=(y))

()in()() =()

y x

pi0

sin

0

sin

((x)in(sin)(x)=(y))

()in()() =()

y x

pi0

sin

pi

sin

Summary

Generally describe any interactive system

Based on the concept of interface and interaction

Think differently

LIDL

Synchronous execution

Declarative

LIDL workshop

Code editor

Prototype

Trace viewer

Why

What

How

Using LIDL

Using LIDL

User HMI ReactorReactorUser Reactor

Using LIDL

Using LIDLinterface Reactor is{ command:{ sv1: Boolean, sv2: Boolean, wv1: Boolean, wv2: Boolean, wp1: Number, wp2: Number, cp: Nubmer, rodPosition: Number } in, status:{ sv1: Boolean, sv2: Boolean, wv1: Boolean, wv2: Boolean, cpUmin: Number, wp1Umin:Number, wp2Umin:Number, rodPosition:Number, outputPower:Number, reactorWaterLevel:Number, reactorPressure:Number, condenserWaterLevel:Number, condenserPressure:Number } out}

Using LIDL

interface ReactorUser is{ powerDisplay: Label, reactor: DualGaugeWidget, condenser: DualGaugeWidget, controlRods: ComplexSlider, wp1: ComplexSlider, wp2: ComplexSlider, cp: ComplexSlider, sv1: ValveWidget, sv2: ValveWidget, wv1: ValveWidget, wv1: ValveWidget, leds: MultipleLedWidget}

Using LIDL

interaction (human machine interface connecting (user:ReactorUser) to (reactor:Reactor)):Activation inis ((user)=({ powerDisplay: (label (active) displaying (reactor.status.outputPower)) reactor: (dual gauge (active) with water level (reactor.status.reactorWaterLevel)) condenser: … … }))

interface ReactorUser is{ powerDisplay: Label, reactor: DualGaugeWidget, condenser: DualGaugeWidget, controlRods: ComplexSlider, wp1: ComplexSlider, wp2: ComplexSlider, cp: ComplexSlider, sv1: ValveWidget, sv2: ValveWidget, wv1: ValveWidget, wv1: ValveWidget, leds: MultipleLedWidget}

Using LIDLinterface Task is { start: Activation in, abort: Activation in, progress: Number out, running: Activation out, finished: Activation out }

interaction (reactor user manual (reactor:co(ReactorUser))):Taskis ( sequentially (start up (reactor)) (operate (reactor)) (shut down (reactor)) )

interaction (start up (reactor:co(ReactorUser))):Taskis ( sequentially ( all (open valve (reactor.sv1)) (open valve (reactor.wv1)) ) ( all ( set slider (reactor.wp1) to (1000)) ( set slider (reactor.cp) to (1000)) ) ( set slider (reactor.controlRods) to (90)) )

Questions