SlideShare una empresa de Scribd logo
1 de 103
Descargar para leer sin conexión
Dynamic Behaviour Adaptation
Through Run-Time Trait Recomposition
Sebastián González
Kim Mens
Marius Colacioiu
Walter Cazzola
29 March 2013
Modularity AOSD 2013
UCLouvain . U. Milan
Context Traits
Towards a Mindset Shift 2
programming in isolation programming with context
forward!
?
?
?
?
?
?
Towards a Mindset Shift 2
Caution
Design patterns
Plugin architectures
Conditional statements
...
programming in isolation programming with context
forward!
?
?
?
?
?
?
m(a) {
if ( ) { IE logic }
!
else if ( ) { Opera logic }
else if ( ) { Chrome logic }
else if ( ) { Safari logic }
else if ( ) { Firefox logic }
else { default logic }
}
Conditional Statements 3
Some variant of ...
m(a) {
if ( ) { IE logic }
!
else if ( ) { Opera logic }
else if ( ) { Chrome logic }
else if ( ) { Safari logic }
else if ( ) { Firefox logic }
else { default logic }
}
Conditional Statements 3
Some variant of ...
Adaptable
m(a) {
if ( ) { IE logic }
!
else if ( ) { Opera logic }
else if ( ) { Chrome logic }
else if ( ) { Safari logic }
else if ( ) { Firefox logic }
else { default logic }
}
Conditional Statements 3
Some variant of ...
Adaptable
Tangled
Scattered
Fixed
No reuse
Complex logic
Design Patterns 4
m(a) { Firefox strategy }
m(a) { default strategy }
m(a) {
strategy.m(a)
}
m(a) { IE strategy }
m(a) { Opera strategy }
m(a) { Chrome strategy }
m(a) { Safari strategy }
Design Patterns 4
m(a) { Firefox strategy }
m(a) { default strategy }
m(a) {
strategy.m(a)
}
m(a) { IE strategy }
m(a) { Opera strategy }
m(a) { Chrome strategy }
m(a) { Safari strategy }
strategy
Design Patterns 4
m(a) { Firefox strategy }
m(a) { default strategy }
m(a) {
strategy.m(a)
}
m(a) { IE strategy }
m(a) { Opera strategy }
m(a) { Chrome strategy }
m(a) { Safari strategy }
strategy
Design Patterns 4
m(a) { Firefox strategy }
m(a) { default strategy }
m(a) {
strategy.m(a)
}
m(a) { IE strategy }
m(a) { Opera strategy }
m(a) { Chrome strategy }
m(a) { Safari strategy }
strategy
Design Patterns 4
m(a) { Firefox strategy }
m(a) { default strategy }
m(a) {
strategy.m(a)
}
m(a) { IE strategy }
m(a) { Opera strategy }
m(a) { Chrome strategy }
m(a) { Safari strategy }
strategy
Modular
Open
Design Patterns 4
m(a) { Firefox strategy }
m(a) { default strategy }
m(a) {
strategy.m(a)
}
m(a) { IE strategy }
m(a) { Opera strategy }
m(a) { Chrome strategy }
m(a) { Safari strategy }
strategy
Infrastructural burden
Anticipated adaptation points
Modular
Open
Layer-Based COP 5
Later on...
In The Paper
‣ Contexts
‣ Traits
‣ Context-Driven Trait Compositions
‣ Composition Policies
‣ Behaviour Extensibility
‣ Context Traits in JavaScript
‣ Implementation Notes
‣ Case Studies
‣ Related Work
‣ Future Work
6
‣ Contexts
‣ Traits
‣ Context-Driven Trait Compositions
‣ Composition Policies
‣ Behaviour Extensibility
‣ Context Traits in JavaScript
In This Presentation 7
Contexts as Situation Reifiers 8
computationally
accessible data
Battery charge = 220 mAh
Idle cycles = 100 MHz
User agent = “Mozilla/5.0...”
Z axis = 0.03
Contexts as Situation Reifiers 8
computationally
accessible data
no semantics
Battery charge = 220 mAh
Idle cycles = 100 MHz
User agent = “Mozilla/5.0...”
Z axis = 0.03
Contexts as Situation Reifiers 8
computationally
accessible data
no semantics
Battery charge = 220 mAh
Idle cycles = 100 MHz
User agent = “Mozilla/5.0...”
Z axis = 0.03
action can be taken
well-defined
situations
Context
Discovery
Low battery charge
High CPU load
Firefox
Landscape orientation
Contexts as Situation Reifiers 8
computationally
accessible data
no semantics
Battery charge = 220 mAh
Idle cycles = 100 MHz
User agent = “Mozilla/5.0...”
Z axis = 0.03
action can be taken
well-defined
situations
Context
Discovery
contexts are reified situations
for which adapted application behaviour can be defined
Low battery charge
High CPU load
Firefox
Landscape orientation
Contexts as Situation Reifiers 8
computationally
accessible data
no semantics
Battery charge = 220 mAh
Idle cycles = 100 MHz
User agent = “Mozilla/5.0...”
Z axis = 0.03
action can be taken
well-defined
situations
Context
Discovery
contexts are reified situations
for which adapted application behaviour can be defined
Low battery charge
High CPU load
Firefox
Landscape orientation
LowBattery = new Context();
window.addEventListener(‘batterystatus’,
function (data) {
if (data.level < 30)
LowBattery.activate();
else
LowBattery.deactivate(); });
... in JavaScript
T.TagT.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.NodeT.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
Traits as Basic Behavioural Units 9
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
T.TagT.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.NodeT.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
Traits as Basic Behavioural Units 9
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
provided
methods
T.TagT.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.NodeT.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
Traits as Basic Behavioural Units 9
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
required
methods
T.TagT.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.NodeT.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
Traits as Basic Behavioural Units 9
+
+
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
sum
operator
T.TagT.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.NodeT.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
XML.ElementXML.Element
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
content
parent
appendChild
replaceChild
removeChild
walkChildren
id
elementsByTagName
elementsByAttribute
Traits as Basic Behavioural Units 9
+
+
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
=
T.TagT.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.NodeT.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
XML.ElementXML.Element
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
content
parent
appendChild
replaceChild
removeChild
walkChildren
id
elementsByTagName
elementsByAttribute
Traits as Basic Behavioural Units 9
+
+
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
=
T.TagT.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.NodeT.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
XML.ElementXML.Element
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
content
parent
appendChild
replaceChild
removeChild
walkChildren
id
elementsByTagName
elementsByAttribute
Traits as Basic Behavioural Units 9
+
+
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
T[“Element”] =
Trait({
elementsByTagName: function(name) { ... },
elementsByAttribute: function(attr) { ... },
getAttribute: Trait.required,
setAttribute: Trait.required,
walkChildren: Trait.required });
... in JavaScript
=
T.TagT.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.NodeT.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
XML.ElementXML.Element
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
content
parent
appendChild
replaceChild
removeChild
walkChildren
id
elementsByTagName
elementsByAttribute
Traits as Basic Behavioural Units 9
+
+
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
T[“Element”] =
Trait({
elementsByTagName: function(name) { ... },
elementsByAttribute: function(attr) { ... },
getAttribute: Trait.required,
setAttribute: Trait.required,
walkChildren: Trait.required });
... in JavaScript
=
traits.js [ Van Cutsem &
Miller 2011 ]
T.TagT.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.NodeT.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
XML.ElementXML.Element
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
content
parent
appendChild
replaceChild
removeChild
walkChildren
id
elementsByTagName
elementsByAttribute
Traits as Basic Behavioural Units 9
+
+
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
T[“Element”] =
Trait({
elementsByTagName: function(name) { ... },
elementsByAttribute: function(attr) { ... },
getAttribute: Trait.required,
setAttribute: Trait.required,
walkChildren: Trait.required });
... in JavaScript
=
T.TagT.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.NodeT.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
XML.ElementXML.Element
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
content
parent
appendChild
replaceChild
removeChild
walkChildren
id
elementsByTagName
elementsByAttribute
Traits as Basic Behavioural Units 9
+
+
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
T[“Element”] =
Trait({
elementsByTagName: function(name) { ... },
elementsByAttribute: function(attr) { ... },
getAttribute: Trait.required,
setAttribute: Trait.required,
walkChildren: Trait.required });
... in JavaScript
=
Traits as Basic Behavioural Units 9
+
+
tag a1=”v1” a2=”v2”
T.ElementT.Element
elementsByTagName
elementsByAttribute
getAttribute
setAttribute
walkChildren
T[“Element”] =
Trait({
elementsByTagName: function(name) { ... },
elementsByAttribute: function(attr) { ... },
getAttribute: Trait.required,
setAttribute: Trait.required,
walkChildren: Trait.required });
... in JavaScript
=
T.Tag
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
T.Node
content
parent
appendChild
replaceChild
removeChild
walkChildren
XML.Element
tagName
addAttribute
getAttribute
setAttribute
removeAttribute
forEachAttribute
content
parent
appendChild
replaceChild
removeChild
walkChildren
id
elementsByTagName
elementsByAttribute
Default Behaviour & Context 10
HTML.Element
addAttribute
getAttribute
...
style
title
T.HTML.ElementT.HTML.Element
class
style
title
getAttribute
setAttribute
= XML.Element +
= HTML.Element +
HTML.Anchor
addAttribute
...
href
type
target
T.HTML.AnchorT.HTML.Anchor
href
type
target
getAttribute
setAttribute
Default Behaviour & Context 10
HTML.Element
addAttribute
getAttribute
...
style
title
T.HTML.ElementT.HTML.Element
class
style
title
getAttribute
setAttribute
= XML.Element +
= HTML.Element +
HTML.Anchor
addAttribute
...
href
type
target
T.HTML.AnchorT.HTML.Anchor
href
type
target
getAttribute
setAttribute
Default Behaviour & Context 10
HTML.Element
addAttribute
getAttribute
...
style
title
T.HTML.ElementT.HTML.Element
class
style
title
getAttribute
setAttribute
= XML.Element +
HTML[“Element”] =
Trait.compose(XML.Element, T.HTML.Element);
HTML[“Anchor”] =
Trait.compose(HTML.Element, T.HTML.Anchor);
... in JavaScript
= HTML.Element +
HTML.Anchor
addAttribute
...
href
type
target
T.HTML.AnchorT.HTML.Anchor
href
type
target
getAttribute
setAttribute
Default Behaviour & Context 10
Default
... for prototypical situations
Prototypical behaviour ...
HTML.Element
addAttribute
getAttribute
...
style
title
T.HTML.ElementT.HTML.Element
class
style
title
getAttribute
setAttribute
= XML.Element +
( unperturbed system )
HTML[“Element”] =
Trait.compose(XML.Element, T.HTML.Element);
HTML[“Anchor”] =
Trait.compose(HTML.Element, T.HTML.Anchor);
... in JavaScript
Context + Traits 11
... in JavaScriptContext Traits
let Default ∈ C Default = new Context();
Context + Traits 11
... in JavaScriptContext Traits
let Default ∈ C Default = new Context();
a = new HTML.Anchor();let ida ∈ L
Context + Traits 11
... in JavaScriptContext Traits
let Default ∈ C Default = new Context();
a = new HTML.Anchor();let ida ∈ L
constitution: L ⨉ C → T
W3Clet W3C ∈ C W3C = new Context();
Context + Traits 11
... in JavaScriptContext Traits
let Default ∈ C Default = new Context();
a = new HTML.Anchor();let ida ∈ L
constitution: L ⨉ C → T
W3Clet W3C ∈ C W3C = new Context();
Context + Traits 11
... in JavaScriptContext Traits
let Default ∈ C Default = new Context();
a = new HTML.Anchor();let ida ∈ L
constitution: L ⨉ C → T
W3Clet W3C ∈ C W3C = new Context();
Context + Traits 11
... in JavaScriptContext Traits
let Default ∈ C Default = new Context();
a = new HTML.Anchor();let ida ∈ L
constitution: L ⨉ C → T
W3Clet W3C ∈ C W3C = new Context();
Context + Traits 11
... in JavaScriptContext Traits
let Default ∈ C Default = new Context();
a = new HTML.Anchor();let ida ∈ L
constitution: L ⨉ C → T
constitution( ida, W3C ) = W3C.adapt(a, T.ValidAnchor);
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
W3Clet W3C ∈ C W3C = new Context();
Context + Traits 11
... in JavaScriptContext Traits
Untrusted
let Default ∈ C Default = new Context();
a = new HTML.Anchor();let ida ∈ L
constitution: L ⨉ C → T
constitution( ida, W3C ) = W3C.adapt(a, T.ValidAnchor);
let Untrusted ∈ C Untrusted = new Context();
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
W3C
constitution
( ida, Untrusted ) =
Untrusted.adapt
(a, T.SecureAnchor);
let W3C ∈ C W3C = new Context();
Context + Traits 11
... in JavaScriptContext Traits
T.SecureAnchorT.SecureAnchor
href
parent
visible
manager
...
Untrusted
let Default ∈ C Default = new Context();
a = new HTML.Anchor();let ida ∈ L
constitution: L ⨉ C → T
constitution( ida, W3C ) = W3C.adapt(a, T.ValidAnchor);
let Untrusted ∈ C Untrusted = new Context();
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
Run-Time Trait Recomposition 12
overloading of constitution: L ⨉ C → Tconstitution: L ⨉ 2C
→ 2T
constitution ( ida, { Default, Untrusted, W3C } )
= { HTML.Anchor, T.SecureAnchor, T.ValidAnchor }
Run-Time Trait Recomposition 12
overloading of constitution: L ⨉ C → Tconstitution: L ⨉ 2C
→ 2T
defined through composition policiescomposition: 2T
→ O
constitution ( ida, { Default, Untrusted, W3C } )
= { HTML.Anchor, T.SecureAnchor, T.ValidAnchor }
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
HTML.Anchor
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
T.SecureAnchorT.SecureAnchor
href
parent
visible
manager
...
Run-Time Trait Recomposition 12
overloading of constitution: L ⨉ C → Tconstitution: L ⨉ 2C
→ 2T
defined through composition policiescomposition: 2T
→ O
constitution ( ida, { Default, Untrusted, W3C } )
= { HTML.Anchor, T.SecureAnchor, T.ValidAnchor }
composition ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
▹ ▹
overriding operator
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
HTML.Anchor
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
T.SecureAnchorT.SecureAnchor
href
parent
visible
manager
...
Run-Time Trait Recomposition 12
overloading of constitution: L ⨉ C → Tconstitution: L ⨉ 2C
→ 2T
defined through composition policiescomposition: 2T
→ O
constitution ( ida, { Default, Untrusted, W3C } )
= { HTML.Anchor, T.SecureAnchor, T.ValidAnchor }
composition ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
▹ ▹
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
Run-Time Trait Recomposition 12
overloading of constitution: L ⨉ C → Tconstitution: L ⨉ 2C
→ 2T
defined through composition policiescomposition: 2T
→ O
constitution ( ida, { Default, Untrusted, W3C } )
= { HTML.Anchor, T.SecureAnchor, T.ValidAnchor }
composition ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
Run-Time Trait Recomposition 12
overloading of constitution: L ⨉ C → Tconstitution: L ⨉ 2C
→ 2T
defined through composition policiescomposition: 2T
→ O
constitution ( ida, { Default, Untrusted, W3C } )
= { HTML.Anchor, T.SecureAnchor, T.ValidAnchor }
composition ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
object = composition · constitution
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
Run-Time Trait Recomposition 12
overloading of constitution: L ⨉ C → Tconstitution: L ⨉ 2C
→ 2T
defined through composition policiescomposition: 2T
→ O
constitution ( ida, { Default, Untrusted, W3C } )
= { HTML.Anchor, T.SecureAnchor, T.ValidAnchor }
composition ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
puts object composition in direct
relationship to the context of execution
object: L ⨉ 2C
→ O
object = composition · constitution
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
Run-Time Trait Recomposition 12
overloading of constitution: L ⨉ C → Tconstitution: L ⨉ 2C
→ 2T
defined through composition policiescomposition: 2T
→ O
constitution ( ida, { Default, Untrusted, W3C } )
= { HTML.Anchor, T.SecureAnchor, T.ValidAnchor }
composition ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
o = TC1 · TC2 · ... · TCn
puts object composition in direct
relationship to the context of execution
object: L ⨉ 2C
→ O
object = composition · constitution
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
TD
Context-Driven Trait Composition
T1
T2
T3
T4
T5
13
TD
Context-Driven Trait Composition
T1
T2
T3
T4
T5
13
TD
Context-Driven Trait Composition
T1
T2
T3
T4
T5
13
TD
Context-Driven Trait Composition
T1
T2
T3
T4
T5
13
TD
Context-Driven Trait Composition
T1
T2
T3
T4
T5
13
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
=
Composition Policies 14
HTML.Anchor T.SecureAnchor T.ValidAnchor▹ ▹
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
=
Composition Policies 14
HTML.Anchor T.SecureAnchor T.ValidAnchor▹ ▹
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parentparent
addAttribute
setAttribute
removeAttribute
What if we want to
bypass security of
visible?
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
=
Composition Policies 14
HTML.Anchor T.SecureAnchor T.ValidAnchor▹ ▹
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parentparent
addAttribute
setAttribute
removeAttribute
What if we want to
bypass security of
visible?
✗ Impossible with strict overriding semantics
(e.g. inheritance, mixins, COP layers)
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
=
Composition Policies 14
HTML.Anchor T.SecureAnchor T.ValidAnchor▹ ▹
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parentparent
addAttribute
setAttribute
removeAttribute
What if we want to
bypass security of
visible?
✗ Impossible with strict overriding semantics
(e.g. inheritance, mixins, COP layers)
Povr ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
{ }
Pbysec ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
{ HTML.Anchor, T.SecureAnchor – visible, T.ValidAnchor }
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
=
Composition Policies 14
HTML.Anchor T.SecureAnchor T.ValidAnchor▹ ▹
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parentparent
addAttribute
setAttribute
removeAttribute
What if we want to
bypass security of
visible?
✗ Impossible with strict overriding semantics
(e.g. inheritance, mixins, COP layers)
Povr ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
{ }
Pbysec ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
{ HTML.Anchor, T.SecureAnchor – visible, T.ValidAnchor }
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
=
Composition Policies 14
HTML.Anchor T.SecureAnchor T.ValidAnchor▹ ▹
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parentparent
addAttribute
setAttribute
removeAttribute
What if we want to
bypass security of
visible?
✗ Impossible with strict overriding semantics
(e.g. inheritance, mixins, COP layers)
exclusion operator
Povr ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
{ }
Pbysec ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
{ HTML.Anchor, T.SecureAnchor – visible, T.ValidAnchor }
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
=
Composition Policies 14
HTML.Anchor T.SecureAnchor T.ValidAnchor▹ ▹
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parentparent
addAttribute
setAttribute
removeAttribute
What if we want to
bypass security of
visible?
✗ Impossible with strict overriding semantics
(e.g. inheritance, mixins, COP layers)
Povr ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
{ }
P : 2T
→ 2T
P = Povr · Pbysec
Pbysec ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
{ HTML.Anchor, T.SecureAnchor – visible, T.ValidAnchor }
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parent
visible
addAttribute
setAttribute
removeAttribute
parent
=
✓Arbitrary combinations
Composition Policies 14
HTML.Anchor T.SecureAnchor T.ValidAnchor▹ ▹
o
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
addAttribute
setAttribute
removeAttribute
href
parent
visible
type
target
href
parentparent
addAttribute
setAttribute
removeAttribute
What if we want to
bypass security of
visible?
✗ Impossible with strict overriding semantics
(e.g. inheritance, mixins, COP layers)
Povr ( { HTML.Anchor, T.SecureAnchor, T.ValidAnchor } ) =
{ }
P : 2T
→ 2T
P = Povr · Pbysec
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
Behaviour Extensibility Challenge 15
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
Behaviour Extensibility Challenge 15
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
how to invoke overridden behaviour?
Behaviour Extensibility Challenge 15
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
how to invoke overridden behaviour?
Behaviour Extensibility Challenge 15
HTML.Anchor
...
setAttribute
...
[ htmlSetAttribute ↦ setAttribute ] =
HTML.Anchor’
...
setAttribute
htmlSetAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
how to invoke overridden behaviour?
Behaviour Extensibility Challenge 15
HTML.Anchor
...
setAttribute
...
[ htmlSetAttribute ↦ setAttribute ] =
HTML.Anchor’
...
setAttribute
htmlSetAttribute
...
aliasing operator
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
how to invoke overridden behaviour?
Behaviour Extensibility Challenge 15
HTML.Anchor
...
setAttribute
...
[ htmlSetAttribute ↦ setAttribute ] =
HTML.Anchor’
...
setAttribute
htmlSetAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
how to invoke overridden behaviour?
T.ValidAnchor.setAttribute = function(name, value) {
...
return self.htmlSetAttribute(name, value);
}
Behaviour Extensibility Challenge 15
T.ValidAnchor’T.ValidAnchor’
addAttribute
setAttribute
removeAttribute
parent
htmlSetAttribute
...
HTML.Anchor
...
setAttribute
...
[ htmlSetAttribute ↦ setAttribute ] =
HTML.Anchor’
...
setAttribute
htmlSetAttribute
...
→ manual edition →
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
how to invoke overridden behaviour?
T.ValidAnchor.setAttribute = function(name, value) {
...
return self.htmlSetAttribute(name, value);
}
Behaviour Extensibility Challenge 15
T.ValidAnchor’T.ValidAnchor’
addAttribute
setAttribute
removeAttribute
parent
htmlSetAttribute
...
HTML.Anchor
...
setAttribute
...
[ htmlSetAttribute ↦ setAttribute ] =
HTML.Anchor’
...
setAttribute
htmlSetAttribute
...
→ manual edition →
...becomes requirement
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
how to invoke overridden behaviour?
T.ValidAnchor.setAttribute = function(name, value) {
...
return self.htmlSetAttribute(name, value);
}
Behaviour Extensibility Challenge 15
T.ValidAnchor’T.ValidAnchor’
addAttribute
setAttribute
removeAttribute
parent
htmlSetAttribute
...
HTML.Anchor
...
setAttribute
...
[ htmlSetAttribute ↦ setAttribute ] =
HTML.Anchor’
...
setAttribute
htmlSetAttribute
...
→ manual edition →
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
T.ValidAnchor.setAttribute = function(name, value) {
...
return self.htmlSetAttribute(name, value);
}
Behaviour Extensibility Challenge 15
T.ValidAnchor’T.ValidAnchor’
addAttribute
setAttribute
removeAttribute
parent
htmlSetAttribute
...
HTML.Anchor
...
setAttribute
...
[ htmlSetAttribute ↦ setAttribute ] =
HTML.Anchor’
...
setAttribute
htmlSetAttribute
...
→ manual edition →
▹
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
T.ValidAnchor.setAttribute = function(name, value) {
...
return self.htmlSetAttribute(name, value);
}
Behaviour Extensibility Challenge 15
T.ValidAnchor’T.ValidAnchor’
addAttribute
setAttribute
removeAttribute
parent
htmlSetAttribute
...
HTML.Anchor
...
setAttribute
...
[ htmlSetAttribute ↦ setAttribute ] =
HTML.Anchor’
...
setAttribute
htmlSetAttribute
...
→ manual edition →
▹
✗ bypassed T.SecureAnchor
▹▹
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
...
T.ValidAnchor.setAttribute = function(name, value) {
...
return self.htmlSetAttribute(name, value);
}
Behaviour Extensibility Challenge 15
T.ValidAnchor’T.ValidAnchor’
addAttribute
setAttribute
removeAttribute
parent
htmlSetAttribute
...
HTML.Anchor
...
setAttribute
...
[ htmlSetAttribute ↦ setAttribute ] =
HTML.Anchor’
...
setAttribute
htmlSetAttribute
...
→ manual edition →
▹
✗ bypassed T.SecureAnchor
▹▹
✗ hard-coded choice of
overridden behaviour
Extensibility Through proceed 16
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
how to invoke overridden behaviour?
T.ValidAnchor = Trait({
setAttribute: function(name, value) {
... // validity check
return self.proceed();
},
...
});
Extensibility Through proceed 16
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
how to invoke overridden behaviour?
proceed
T.ValidAnchor = Trait({
setAttribute: function(name, value) {
... // validity check
return self.proceed();
},
...
});
Extensibility Through proceed 16
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
becomes requirement
how to invoke overridden behaviour?
proceed
T.ValidAnchor = Trait({
setAttribute: function(name, value) {
... // validity check
return self.proceed();
},
...
});
Extensibility Through proceed 16
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
how to invoke overridden behaviour?
proceed
T.ValidAnchor = Trait({
setAttribute: function(name, value) {
... // validity check
return self.proceed();
},
...
});
Extensibility Through proceed 16
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
✓ open choice of
overridden behaviour
how to invoke overridden behaviour?
proceed
T.ValidAnchor = Trait({
setAttribute: function(name, value) {
... // validity check
return self.proceed();
},
...
});
Extensibility Through proceed 16
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
how to invoke overridden behaviour?
proceed
▹
T.SecureAnchorT.SecureAnchor
...
setAttribute
...
parent
visible
manager
...
▹
T.ValidAnchor = Trait({
setAttribute: function(name, value) {
... // validity check
return self.proceed();
},
...
});
Extensibility Through proceed 16
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
how to invoke overridden behaviour?
proceed
▹
T.SecureAnchorT.SecureAnchor
...
setAttribute
...
parent
visible
manager
...
▹
T.Extensible
proceed
Dynamic
T.ValidAnchor = Trait({
setAttribute: function(name, value) {
... // validity check
return self.proceed();
},
...
});
Extensibility Through proceed 16
HTML.Anchor
...
setAttribute
...
T.ValidAnchorT.ValidAnchor
addAttribute
setAttribute
removeAttribute
parent
how to invoke overridden behaviour?
proceed
▹
T.SecureAnchorT.SecureAnchor
...
setAttribute
...
parent
visible
manager
...
▹
‣ Contexts: frame of reference to define adaptations
‣ Traits: convenient units of adaptation
‣ Policies: flexible compositions (e.g. non-linear)
‣ Extensibility: independent behaviour extensions
‣ JavaScript: easy definition of contexts, traits, and
composition
Summary 17
‣ Contexts: frame of reference to define adaptations
‣ Traits: convenient units of adaptation
‣ Policies: flexible compositions (e.g. non-linear)
‣ Extensibility: independent behaviour extensions
‣ JavaScript: easy definition of contexts, traits, and
composition
Summary 17
direct causal connection
composition of the computational system
situation in which the system executes
⇋
In The Paper
‣ Default composition policy
‣ Resolution of proceed chains through policies
‣ Implementation technique for proceed
‣ Case Studies
18
Questions?
Context Traits
19
Additional Slides
Resolution of proceed Through Policies 21
a b
c d
T1
c g
q
T2c() { ... self.proceed() ... }
c d
e f
c h
T3
· · ·
Resolution of proceed Through Policies 21
a b
c d
T1
c g
q
T2c() { ... self.proceed() ... }
c d
e f
c h
T3
· · ·
Resolution of proceed Through Policies 21
pairwise resolution: Pg ( { T2, T3 } ) = { TR }
a b
c d
T1
c g
q
T2c() { ... self.proceed() ... }
c d
e f
c h
T3
· · ·
Resolution of proceed Through Policies 21
pairwise resolution: Pg ( { T2, T3 } ) = { TR }
a b
c d
T1
c g
q
T2
either TR ( c ) = or TR ( c ) =c c
( since policies resolve through +, ▹, ↦, – exclusively )
c() { ... self.proceed() ... }
c d
e f
c h
T3
· · ·
Resolution of proceed Through Policies 21
pairwise resolution: Pg ( { T2, T3 } ) = { TR }
a b
c d
T1
c g
q
T2
either TR ( c ) = or TR ( c ) =c c
( since policies resolve through +, ▹, ↦, – exclusively )
c() { ... self.proceed() ... }
c d
e f
suppose TR ( c ) = ; then <c cc
c h
T3
· · ·
Resolution of proceed Through Policies 22
Pg induces an order < < <c ccc
c() { ... self.proceed() ... }
current next
Resolution of proceed Through Policies 22
Pg induces an order < < <c ccc
c() { ... self.proceed() ... }
current next
c<
Resolution By Activation Age
Default policy Pa
23
Resolution By Activation Age
C1 < C2 < ... < Cnyounger older
Default policy Pa
23
Resolution By Activation Age
Pa ( { TC1, TC2, ... , TCn } ) = { TC1 ▹ TC2 ▹ ... ▹ TCn }
C1 < C2 < ... < Cnyounger older
Default policy Pa
23
Resolution By Activation Age
Pa ( { TC1, TC2, ... , TCn } ) = { TC1 ▹ TC2 ▹ ... ▹ TCn }
C1 < C2 < ... < Cnyounger older
produces a sort of
layering according to
contexts
a b
c dc d
e f
TC1
TC2
e f
g h
TC3
Default policy Pa
23
m n
c d
TD
Resolution By Activation Age
Pa ( { TC1, TC2, ... , TCn } ) = { TC1 ▹ TC2 ▹ ... ▹ TCn }
C1 < C2 < ... < Cnyounger older
produces a sort of
layering according to
contexts
a b
c dc d
e f
TC1
TC2
e f
g h
TC3
Default policy Pa
23
Licence 24
creativecommons.org/licenses/by-nc-sa/3.0

Más contenido relacionado

Destacado

Etiquette and good manners
Etiquette and good mannersEtiquette and good manners
Etiquette and good mannersNadine Daher
 
Developing leadership skills
Developing leadership skillsDeveloping leadership skills
Developing leadership skillsYodhia Antariksa
 
Team work presentation
Team work presentationTeam work presentation
Team work presentationNasrin Tayyab
 
Decision making & problem solving
Decision making & problem solvingDecision making & problem solving
Decision making & problem solvingashish1afmi
 
Teamwork Presentation
Teamwork PresentationTeamwork Presentation
Teamwork PresentationJo Woolery
 
Teamwork presentation
Teamwork presentation Teamwork presentation
Teamwork presentation ct231
 
Positive Attitude
Positive AttitudePositive Attitude
Positive AttitudeRajiv Bajaj
 
Leadership styles
Leadership stylesLeadership styles
Leadership stylesMohini Sahu
 

Destacado (15)

What is a case study
What is a case studyWhat is a case study
What is a case study
 
Management & Leadership
Management & LeadershipManagement & Leadership
Management & Leadership
 
Case study-research-method
Case study-research-methodCase study-research-method
Case study-research-method
 
Good manners
Good mannersGood manners
Good manners
 
Etiquette and good manners
Etiquette and good mannersEtiquette and good manners
Etiquette and good manners
 
Case Study Method
Case Study MethodCase Study Method
Case Study Method
 
Developing leadership skills
Developing leadership skillsDeveloping leadership skills
Developing leadership skills
 
Team work presentation
Team work presentationTeam work presentation
Team work presentation
 
Decision making & problem solving
Decision making & problem solvingDecision making & problem solving
Decision making & problem solving
 
Teamwork Presentation
Teamwork PresentationTeamwork Presentation
Teamwork Presentation
 
Teamwork presentation
Teamwork presentation Teamwork presentation
Teamwork presentation
 
Positive Attitude
Positive AttitudePositive Attitude
Positive Attitude
 
Positive attitude ppt
Positive attitude pptPositive attitude ppt
Positive attitude ppt
 
Case study Research
Case study Research Case study Research
Case study Research
 
Leadership styles
Leadership stylesLeadership styles
Leadership styles
 

Similar a Context Traits Dynamic Behaviour Adaptation Through Run-Time Trait Recomposition

IDC 1도 모르는 개발자가 DevOps를 만났을때
IDC 1도 모르는 개발자가 DevOps를 만났을때IDC 1도 모르는 개발자가 DevOps를 만났을때
IDC 1도 모르는 개발자가 DevOps를 만났을때주은 안
 
2013 gr8 conf_grails_code_from_the_trenches
2013 gr8 conf_grails_code_from_the_trenches2013 gr8 conf_grails_code_from_the_trenches
2013 gr8 conf_grails_code_from_the_trenchesEdwin van Nes
 
Hierarchical free monads and software design in fp
Hierarchical free monads and software design in fpHierarchical free monads and software design in fp
Hierarchical free monads and software design in fpAlexander Granin
 
From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)Jose Manuel Pereira Garcia
 
Compass Framework
Compass FrameworkCompass Framework
Compass FrameworkLukas Vlcek
 
Applying Memory Forensics to Rootkit Detection
Applying Memory Forensics to Rootkit DetectionApplying Memory Forensics to Rootkit Detection
Applying Memory Forensics to Rootkit DetectionIgor Korkin
 
TransmogrifAI - Automate Machine Learning Workflow with the power of Scala an...
TransmogrifAI - Automate Machine Learning Workflow with the power of Scala an...TransmogrifAI - Automate Machine Learning Workflow with the power of Scala an...
TransmogrifAI - Automate Machine Learning Workflow with the power of Scala an...Chetan Khatri
 
JavaScript Miller Columns
JavaScript Miller ColumnsJavaScript Miller Columns
JavaScript Miller ColumnsJonathan Fine
 
mongoDB Performance
mongoDB PerformancemongoDB Performance
mongoDB PerformanceMoshe Kaplan
 
Mazda Use of Third Generation Xml Tools
Mazda Use of Third Generation Xml ToolsMazda Use of Third Generation Xml Tools
Mazda Use of Third Generation Xml ToolsCardinaleWay Mazda
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVMJohn Lee
 
Patterns in Python
Patterns in PythonPatterns in Python
Patterns in Pythondn
 
[AWS Innovate 온라인 컨퍼런스] 간단한 Python 코드만으로 높은 성능의 기계 학습 모델 만들기 - 김무현, AWS Sr.데이...
[AWS Innovate 온라인 컨퍼런스] 간단한 Python 코드만으로 높은 성능의 기계 학습 모델 만들기 - 김무현, AWS Sr.데이...[AWS Innovate 온라인 컨퍼런스] 간단한 Python 코드만으로 높은 성능의 기계 학습 모델 만들기 - 김무현, AWS Sr.데이...
[AWS Innovate 온라인 컨퍼런스] 간단한 Python 코드만으로 높은 성능의 기계 학습 모델 만들기 - 김무현, AWS Sr.데이...Amazon Web Services Korea
 
DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)Oleg Zinchenko
 
Generic Synchronization Policies in C++
Generic Synchronization Policies in C++Generic Synchronization Policies in C++
Generic Synchronization Policies in C++Ciaran McHale
 
Using Sumo Logic - Apr 2018
Using Sumo Logic - Apr 2018Using Sumo Logic - Apr 2018
Using Sumo Logic - Apr 2018Sumo Logic
 
Integration&SOA_v0.2
Integration&SOA_v0.2Integration&SOA_v0.2
Integration&SOA_v0.2Sergey Popov
 
2011-03-29 London - drools
2011-03-29 London - drools2011-03-29 London - drools
2011-03-29 London - droolsGeoffrey De Smet
 

Similar a Context Traits Dynamic Behaviour Adaptation Through Run-Time Trait Recomposition (20)

IDC 1도 모르는 개발자가 DevOps를 만났을때
IDC 1도 모르는 개발자가 DevOps를 만났을때IDC 1도 모르는 개발자가 DevOps를 만났을때
IDC 1도 모르는 개발자가 DevOps를 만났을때
 
2013 gr8 conf_grails_code_from_the_trenches
2013 gr8 conf_grails_code_from_the_trenches2013 gr8 conf_grails_code_from_the_trenches
2013 gr8 conf_grails_code_from_the_trenches
 
Hierarchical free monads and software design in fp
Hierarchical free monads and software design in fpHierarchical free monads and software design in fp
Hierarchical free monads and software design in fp
 
From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)
 
Deploying Machine Learning Models to Production
Deploying Machine Learning Models to ProductionDeploying Machine Learning Models to Production
Deploying Machine Learning Models to Production
 
Compass Framework
Compass FrameworkCompass Framework
Compass Framework
 
ProgrammingPrimerAndOOPS
ProgrammingPrimerAndOOPSProgrammingPrimerAndOOPS
ProgrammingPrimerAndOOPS
 
Applying Memory Forensics to Rootkit Detection
Applying Memory Forensics to Rootkit DetectionApplying Memory Forensics to Rootkit Detection
Applying Memory Forensics to Rootkit Detection
 
TransmogrifAI - Automate Machine Learning Workflow with the power of Scala an...
TransmogrifAI - Automate Machine Learning Workflow with the power of Scala an...TransmogrifAI - Automate Machine Learning Workflow with the power of Scala an...
TransmogrifAI - Automate Machine Learning Workflow with the power of Scala an...
 
JavaScript Miller Columns
JavaScript Miller ColumnsJavaScript Miller Columns
JavaScript Miller Columns
 
mongoDB Performance
mongoDB PerformancemongoDB Performance
mongoDB Performance
 
Mazda Use of Third Generation Xml Tools
Mazda Use of Third Generation Xml ToolsMazda Use of Third Generation Xml Tools
Mazda Use of Third Generation Xml Tools
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVM
 
Patterns in Python
Patterns in PythonPatterns in Python
Patterns in Python
 
[AWS Innovate 온라인 컨퍼런스] 간단한 Python 코드만으로 높은 성능의 기계 학습 모델 만들기 - 김무현, AWS Sr.데이...
[AWS Innovate 온라인 컨퍼런스] 간단한 Python 코드만으로 높은 성능의 기계 학습 모델 만들기 - 김무현, AWS Sr.데이...[AWS Innovate 온라인 컨퍼런스] 간단한 Python 코드만으로 높은 성능의 기계 학습 모델 만들기 - 김무현, AWS Sr.데이...
[AWS Innovate 온라인 컨퍼런스] 간단한 Python 코드만으로 높은 성능의 기계 학습 모델 만들기 - 김무현, AWS Sr.데이...
 
DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)DDD on example of Symfony (SfCampUA14)
DDD on example of Symfony (SfCampUA14)
 
Generic Synchronization Policies in C++
Generic Synchronization Policies in C++Generic Synchronization Policies in C++
Generic Synchronization Policies in C++
 
Using Sumo Logic - Apr 2018
Using Sumo Logic - Apr 2018Using Sumo Logic - Apr 2018
Using Sumo Logic - Apr 2018
 
Integration&SOA_v0.2
Integration&SOA_v0.2Integration&SOA_v0.2
Integration&SOA_v0.2
 
2011-03-29 London - drools
2011-03-29 London - drools2011-03-29 London - drools
2011-03-29 London - drools
 

Más de kim.mens

Software Maintenance and Evolution
Software Maintenance and EvolutionSoftware Maintenance and Evolution
Software Maintenance and Evolutionkim.mens
 
Context-Oriented Programming
Context-Oriented ProgrammingContext-Oriented Programming
Context-Oriented Programmingkim.mens
 
Software Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented ProgrammingSoftware Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented Programmingkim.mens
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smellskim.mens
 
Object-Oriented Design Heuristics
Object-Oriented Design HeuristicsObject-Oriented Design Heuristics
Object-Oriented Design Heuristicskim.mens
 
Software Patterns
Software PatternsSoftware Patterns
Software Patternskim.mens
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoringkim.mens
 
Domain Modelling
Domain ModellingDomain Modelling
Domain Modellingkim.mens
 
Object-Oriented Application Frameworks
Object-Oriented Application FrameworksObject-Oriented Application Frameworks
Object-Oriented Application Frameworkskim.mens
 
Towards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation FrameworkTowards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation Frameworkkim.mens
 
Towards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty ApproachesTowards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty Approacheskim.mens
 
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software EngineeringBreaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineeringkim.mens
 
Context-oriented programming
Context-oriented programmingContext-oriented programming
Context-oriented programmingkim.mens
 
Basics of reflection
Basics of reflectionBasics of reflection
Basics of reflectionkim.mens
 
Advanced Reflection in Java
Advanced Reflection in JavaAdvanced Reflection in Java
Advanced Reflection in Javakim.mens
 
Basics of reflection in java
Basics of reflection in javaBasics of reflection in java
Basics of reflection in javakim.mens
 
Reflection in Ruby
Reflection in RubyReflection in Ruby
Reflection in Rubykim.mens
 
Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Rubykim.mens
 
Introduction to Smalltalk
Introduction to SmalltalkIntroduction to Smalltalk
Introduction to Smalltalkkim.mens
 
A gentle introduction to reflection
A gentle introduction to reflectionA gentle introduction to reflection
A gentle introduction to reflectionkim.mens
 

Más de kim.mens (20)

Software Maintenance and Evolution
Software Maintenance and EvolutionSoftware Maintenance and Evolution
Software Maintenance and Evolution
 
Context-Oriented Programming
Context-Oriented ProgrammingContext-Oriented Programming
Context-Oriented Programming
 
Software Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented ProgrammingSoftware Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented Programming
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smells
 
Object-Oriented Design Heuristics
Object-Oriented Design HeuristicsObject-Oriented Design Heuristics
Object-Oriented Design Heuristics
 
Software Patterns
Software PatternsSoftware Patterns
Software Patterns
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
Domain Modelling
Domain ModellingDomain Modelling
Domain Modelling
 
Object-Oriented Application Frameworks
Object-Oriented Application FrameworksObject-Oriented Application Frameworks
Object-Oriented Application Frameworks
 
Towards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation FrameworkTowards a Context-Oriented Software Implementation Framework
Towards a Context-Oriented Software Implementation Framework
 
Towards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty ApproachesTowards a Taxonomy of Context-Aware Software Variabilty Approaches
Towards a Taxonomy of Context-Aware Software Variabilty Approaches
 
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software EngineeringBreaking the Walls: A Unified Vision on Context-Oriented Software Engineering
Breaking the Walls: A Unified Vision on Context-Oriented Software Engineering
 
Context-oriented programming
Context-oriented programmingContext-oriented programming
Context-oriented programming
 
Basics of reflection
Basics of reflectionBasics of reflection
Basics of reflection
 
Advanced Reflection in Java
Advanced Reflection in JavaAdvanced Reflection in Java
Advanced Reflection in Java
 
Basics of reflection in java
Basics of reflection in javaBasics of reflection in java
Basics of reflection in java
 
Reflection in Ruby
Reflection in RubyReflection in Ruby
Reflection in Ruby
 
Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Ruby
 
Introduction to Smalltalk
Introduction to SmalltalkIntroduction to Smalltalk
Introduction to Smalltalk
 
A gentle introduction to reflection
A gentle introduction to reflectionA gentle introduction to reflection
A gentle introduction to reflection
 

Último

Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfOverkill Security
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 

Último (20)

Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 

Context Traits Dynamic Behaviour Adaptation Through Run-Time Trait Recomposition