SlideShare a Scribd company logo
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

More Related Content

Viewers also liked

What is a case study
What is a case studyWhat is a case study
What is a case study
A. Pooja Narayan
 
Management & Leadership
Management & LeadershipManagement & Leadership
Management & Leadership
InterQuest Group
 
Case study-research-method
Case study-research-methodCase study-research-method
Case study-research-method
Renu Susan Thomas
 
Good manners
Good mannersGood manners
Good manners
teacher xin
 
Etiquette and good manners
Etiquette and good mannersEtiquette and good manners
Etiquette and good manners
Nadine Daher
 
Case Study Method
Case Study MethodCase Study Method
Case Study Method
Dr. Rana Singh
 
Developing leadership skills
Developing leadership skillsDeveloping leadership skills
Developing leadership skills
Yodhia Antariksa
 
Team work presentation
Team work presentationTeam work presentation
Team work presentation
Nasrin Tayyab
 
Decision making & problem solving
Decision making & problem solvingDecision making & problem solving
Decision making & problem solving
ashish1afmi
 
Teamwork Presentation
Teamwork PresentationTeamwork Presentation
Teamwork Presentation
Jo Woolery
 
Teamwork presentation
Teamwork presentation Teamwork presentation
Teamwork presentation
ct231
 
Positive Attitude
Positive AttitudePositive Attitude
Positive Attitude
Rajiv Bajaj
 
Positive attitude ppt
Positive attitude pptPositive attitude ppt
Positive attitude ppt
Muhammad Qasim
 
Case study Research
Case study Research Case study Research
Case study Research
Dr Muireann O'Keeffe
 
Leadership styles
Leadership stylesLeadership styles
Leadership styles
Mohini Sahu
 

Viewers also liked (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 to 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_trenches
Edwin 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 fp
Alexander 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
 
Deploying Machine Learning Models to Production
Deploying Machine Learning Models to ProductionDeploying Machine Learning Models to Production
Deploying Machine Learning Models to Production
Anass Bensrhir - Senior Data Scientist
 
Compass Framework
Compass FrameworkCompass Framework
Compass Framework
Lukas Vlcek
 
ProgrammingPrimerAndOOPS
ProgrammingPrimerAndOOPSProgrammingPrimerAndOOPS
ProgrammingPrimerAndOOPS
sunmitraeducation
 
Applying Memory Forensics to Rootkit Detection
Applying Memory Forensics to Rootkit DetectionApplying Memory Forensics to Rootkit Detection
Applying Memory Forensics to Rootkit Detection
Igor 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 Columns
Jonathan Fine
 
mongoDB Performance
mongoDB PerformancemongoDB Performance
mongoDB Performance
Moshe 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 Tools
CardinaleWay Mazda
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVM
John Lee
 
Patterns in Python
Patterns in PythonPatterns in Python
Patterns in Python
dn
 
[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 2018
Sumo Logic
 
Integration&SOA_v0.2
Integration&SOA_v0.2Integration&SOA_v0.2
Integration&SOA_v0.2
Sergey Popov
 
2011-03-29 London - drools
2011-03-29 London - drools2011-03-29 London - drools
2011-03-29 London - drools
Geoffrey De Smet
 

Similar to 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
 

More from kim.mens

Software Maintenance and Evolution
Software Maintenance and EvolutionSoftware Maintenance and Evolution
Software Maintenance and Evolution
kim.mens
 
Context-Oriented Programming
Context-Oriented ProgrammingContext-Oriented Programming
Context-Oriented Programming
kim.mens
 
Software Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented ProgrammingSoftware Reuse and Object-Oriented Programming
Software Reuse and Object-Oriented Programming
kim.mens
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smells
kim.mens
 
Object-Oriented Design Heuristics
Object-Oriented Design HeuristicsObject-Oriented Design Heuristics
Object-Oriented Design Heuristics
kim.mens
 
Software Patterns
Software PatternsSoftware Patterns
Software Patterns
kim.mens
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
kim.mens
 
Domain Modelling
Domain ModellingDomain Modelling
Domain Modelling
kim.mens
 
Object-Oriented Application Frameworks
Object-Oriented Application FrameworksObject-Oriented Application Frameworks
Object-Oriented Application Frameworks
kim.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 Framework
kim.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 Approaches
kim.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 Engineering
kim.mens
 
Context-oriented programming
Context-oriented programmingContext-oriented programming
Context-oriented programming
kim.mens
 
Basics of reflection
Basics of reflectionBasics of reflection
Basics of reflection
kim.mens
 
Advanced Reflection in Java
Advanced Reflection in JavaAdvanced Reflection in Java
Advanced Reflection in Java
kim.mens
 
Basics of reflection in java
Basics of reflection in javaBasics of reflection in java
Basics of reflection in java
kim.mens
 
Reflection in Ruby
Reflection in RubyReflection in Ruby
Reflection in Ruby
kim.mens
 
Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Ruby
kim.mens
 
Introduction to Smalltalk
Introduction to SmalltalkIntroduction to Smalltalk
Introduction to Smalltalk
kim.mens
 
A gentle introduction to reflection
A gentle introduction to reflectionA gentle introduction to reflection
A gentle introduction to reflection
kim.mens
 

More from 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
 

Recently uploaded

Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
Webinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data WarehouseWebinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data Warehouse
Federico Razzoli
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
jpupo2018
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
Postman
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 

Recently uploaded (20)

Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
Webinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data WarehouseWebinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data Warehouse
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 

Context Traits Dynamic Behaviour Adaptation Through Run-Time Trait Recomposition