SlideShare a Scribd company logo
BIDIRECTIONAL PROGRAMMING FOR
SELF-ADAPTIVE SOFTWARE
Lionel Montrieux, NII

<lionel@nii.ac.jp>
based on discussions with Sebastian Uchitel (U. of Buenos Aires), Zhenjiang Hu (NII),Tao
Zan (NII, SOKENDAI), Zirun Zhu (NII, SOKENDAI)
TAKE AWAY: BIDIRECTIONAL
PROGRAMS ARE AWESOME,ANDYOU
SHOULD USETHEM.
WHAT IS A
BIDIRECTIONAL
TRANSFORMATION?
get :: Source -> View
put :: Source -> View -> Source
S
S’
V
V’
get
put
[BX]
WHAT IS A WELL-
BEHAVED
BIDIRECTIONAL
TRANSFORMATION?
GetPut: put s (get s) = s
S
S
V
get
put
[BX]
WHAT IS A WELL-
BEHAVED
BIDIRECTIONAL
TRANSFORMATION?
PutGet: get(put s v) = v
S
S’ V
put
get
[BX]
BIDIRECTIONAL PROGRAMS (BIFLUX)
• calendar
• event (work)
• name: Meeting
• date: 9 April 2015, 15:00
• location: room 2005
• notes: prepare slides
• event (private)
• name: Complaint
• date: 9 April 2015, 17:00
• location: pet shop
• notes: dead parrot
• calview
• event (work)
• name: Meeting
• date: 9 April 2015, 15:00
• location: room 2005
[BiFluX, SACMAT]
BIDIRECTIONAL PROGRAMS (BIFLUX)
UPDATE $event IN $source/event BY
MATCH ->
REPLACE $event/starttime WITH $starttime;
REPLACE $event/endtime WITH $endtime;
REPLACE $event/location WITH $location
| UNMATCHV -> CREATE VALUE
<event>
<starttime/>
<endtime/>
<name/>
<note>nothing</note>
<location/>
<private>False</private>
</event>
| UNMATCHS -> DELETE .
FOR VIEW event[$starttime AS v:starttime,
$endtime AS v:endtime, $name AS v:name,
$location AS v:location] IN $view/*
MATCHING SOURCE BY $event/name VIEW BY $name
WHERE private/text() = 'False' [BiFluX, SACMAT]
BIDIRECTIONAL PROGRAMS (BIGUL)
source DTD view DTDBiFluX update
BiFluX
BiGUL updatesource type view type
BiGUL
BX executable
BIDIRECTIONAL PROGRAMS (BIGUL - SRC)
type ApiCalls = [SCall]
type SCall = (SPermissions, (File, (Line, (Protected, Deleted))))
type File = String
type Line = Int
type Deleted = Bool
type Name = String
type SPermissions = [SPermission]
type SPermission = (Name, [ApiVersion])
type Protected = String
type ApiVersion = String
BIDIRECTIONAL PROGRAMS (BIGUL - SRC)
type Calls = [VCall]
type VCall = (File, (Line, VPermissions))
type VPermissions = [VPermission]
type VPermission = Name
BIDIRECTIONAL PROGRAMS (BIGUL - UPD)
t :: MonadError' e m => ApiVersion -> BiGUL m ApiCalls Calls
t ver = Align ((ps, (f, (l, (ptd, del)))) -> return (not del))
((_, (f, (l, _))) (f', (l', _)) -> return (f == f' && l == l'))
(Rearr (RVar `RProd` (RVar `RProd` RVar))
(EDir (DRight (DRight DVar)) `EProd`
(EDir (DLeft DVar) `EProd`
(EDir (DRight (DLeft DVar)) `EProd`
(EConst () `EProd` EConst ()))))
(Update (UVar (Align ((_, vers) -> return (ver `elem` vers))
(_ _ -> return True)
(Rearr RVar (EDir DVar `EProd` EConst ())
(Update (UVar Replace `UProd` UVar Skip)))
(_ -> return ("", [ver]))
(_ -> return Nothing)) `UProd`
(UVar Replace `UProd`
(UVar Replace `UProd`
(UVar Skip `UProd` UVar Skip))))))
(_ -> return ([], ("", (0, ("", False)))))
((ps, (f, (l, (ptd, del)))) -> return (Just (ps, (f, (l, (ptd, True))))))
BP AND SELF-ADAPTATION
Where it can help, and what challenges lie ahead
S
S’
V
V’
get
put
THE NORWEGIAN BLUE, INC.
online pet shop.
APACHE WEB SERVER
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/ssl/certs/resting.norwegianblue.com.pem
SSLCertificateKeyFile /etc/ssl/private/resting.norwegianblue.com.key
SSLProtocol TLSv1:TLSv1.1:TLSv1.2
SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH
+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH
+aRSA:!RC4:!aNULL:!eNULL:!LOW :3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!EXPORT:!aECDH:!
EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
<Directory /var/www/norwegianblue>
AllowOverride All
</Directory>
DocumentRoot /var/www/norwegianblue
ServerName resting.norwegianblue.com
</VirtualHost>
POODLE
CVE-2014-3566
Man-in-the-middle attack on SSLv3
SELF-ADAPTATION
Keeping the configuration secure
M A P E
Apache configuration (.conf)CVE DB service apache2 reload
NGINX SERVERserver {
listen 443 ssl;
server_name
stunned.norwegianblue.com;
ssl_certificate /etc/ssl/certs/
stunned.norwegianblue.com.pem;
ssl_certificate_key /etc/ssl/private/
stunned.norwegianblue.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH
+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH
+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH
+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH
+aRSA !RC4 !aNULL !eNULL !LOW !3DES !
MD5 !EXP !PSK !SRP !DSS !EXPORT !
aECDH !EDH-DSS-DES-CBC3-SHA !EDH-RSA-
DES-CBC3-SHA !KRB5-DES-CBC3-SHA";
ssl_dhparam /etc/ssl/dhparams.pem;
# Path to the root of your installation
root /var/www/norwegianblue/;
# set max upload size
client_max_body_size 10G;
fastcgi_buffers 64 4K;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(?:.htaccess|data|config|db_st
deny all;
}
}
AN ABSTRACT LAYER
Bidirectional programming for abstraction and migration
Apache conf Nginx confCVE DB service mgr
Abstract model
M A P E
BXBX
A SMALL MODEL IS A GOOD MODEL
Bidirectional programming to the rescue, again
Abstract layer
M A P E
Abstract SSL layer
BX
THE SMALLERTHE BETTER
Model size may vary at runtime
Abstract layer
M A P E
Abstract SSL layer
BX
MULTIPLE SMALL MODELS
N loops
Abstract layer
SSL
BX
MAPE
Python
BX
MAPE
access
BX
MAPE
SYNCHRONISATION
Straightforward, with bidirectional transformations
Abstract layer
SSL
BX
MAPE
Python
BX
MAPE
access
BX
MAPE
Python’
Abstract layer’
access’
BEYOND SELF-CONFIGURATION
current system vs. desired system
Concrete layer
System
Abstract layer
current state desired stateAWS APIAWS API
BX
DELTA
Bidirectional programs to the rescue, once more!
AWS APIAWS API
BX
Abstract layer
System
Concrete layer
current state
current state
current state
desired state
current state + delta
current state
current state
ASSIGNMENT:
In small groups, find where
bidirectional programs could help
you develop self-adaptive systems
S
S’
V
V’
get
put
REFERENCES
• [BiFluX]: H. Pacheco,T. Zan, and Z. Hu,“BiFluX:A Bidirectional Functional Update
Language for XML,” in 6th International Symposium on Principles and Practice of
Declarative Programming (PPDP 2014), 2014.
• [BX]: S. Fischer, Z. Hu, and H. Pacheco,“‘Putback’ is the Essence of Bidirectional
Programming,” National Institute of Informatics, GRACE-TR 2012-08, Dec. 2012.
• [SACMAT]: L. Montrieux and Z. Hu,“Towards Attribute-Based Authorisation for
Bidirectional Programming,” 2015, pp. 185–196.
IMAGE CREDITS
• Poodle by Marcia O’Connor CC-by-nc 2.0
• Python parrot 3 byTaylorHerring CC-by-nc-nd 2.0

More Related Content

ODP
To Infinity & Beyond: Protocols & sequences in Node - Part 2
PPT
Realtime Analytics Using MongoDB, Python, Gevent, and ZeroMQ
PDF
All I know about rsc.io/c2go
PDF
Java8 stream
PDF
PDF
Basicsof c make and git for a hello qt application
PPT
Cpp tutorial
To Infinity & Beyond: Protocols & sequences in Node - Part 2
Realtime Analytics Using MongoDB, Python, Gevent, and ZeroMQ
All I know about rsc.io/c2go
Java8 stream
Basicsof c make and git for a hello qt application
Cpp tutorial

What's hot (20)

KEY
JavaScript @ CTK
PDF
Streams for (Co)Free!
PDF
Diving into HHVM Extensions (Brno PHP Conference 2015)
DOCX
Array using recursion
PDF
Cluj.py Meetup: Extending Python in C
PDF
Groovify your java code by hervé roussel
PDF
5 1. character processing
PDF
Introduction of ES2015
KEY
谈谈Javascript设计
PDF
20151224-games
PPT
Introduction to Perl
PDF
Tools.cpp
PDF
The Future of JavaScript (SXSW '07)
PDF
The Big Three
PDF
2016 gunma.web games-and-asm.js
PPT
Thread介紹
PDF
Diving into HHVM Extensions (php[tek] 2016)
PPTX
Advanced JavaScript
JavaScript @ CTK
Streams for (Co)Free!
Diving into HHVM Extensions (Brno PHP Conference 2015)
Array using recursion
Cluj.py Meetup: Extending Python in C
Groovify your java code by hervé roussel
5 1. character processing
Introduction of ES2015
谈谈Javascript设计
20151224-games
Introduction to Perl
Tools.cpp
The Future of JavaScript (SXSW '07)
The Big Three
2016 gunma.web games-and-asm.js
Thread介紹
Diving into HHVM Extensions (php[tek] 2016)
Advanced JavaScript
Ad

Viewers also liked (18)

PDF
The Three Steps to Brand Building
PDF
Functional foods 6 trends
PDF
rbacUML at CodeGeneration 2012
ODP
Security Analysis for Evolvable Software
PDF
Open University CRC Students conference 2010
DOCX
물뽕 『 W3.ow.to 』 톡 w2015 ♡ 물뽕판매,물뽕 약효,물뽕 구입처,물뽕 구매처,물뽕 파는곳
PPTX
Gmail Login Sign in Help
PDF
Reusable Self-Adaptation through Bidirectional Programming
PPT
BRF+ Walk through
DOC
CV of Mashudu Khorombi
PDF
Nemus Investor Presentation Feb 2017
PPTX
Plan clase
PDF
Juegos de simulación
DOCX
David J Whipple
DOC
Hayley Newsome CV Current
PPTX
La flauta mágica
PPTX
Ambiente
PPTX
Bioelementos
The Three Steps to Brand Building
Functional foods 6 trends
rbacUML at CodeGeneration 2012
Security Analysis for Evolvable Software
Open University CRC Students conference 2010
물뽕 『 W3.ow.to 』 톡 w2015 ♡ 물뽕판매,물뽕 약효,물뽕 구입처,물뽕 구매처,물뽕 파는곳
Gmail Login Sign in Help
Reusable Self-Adaptation through Bidirectional Programming
BRF+ Walk through
CV of Mashudu Khorombi
Nemus Investor Presentation Feb 2017
Plan clase
Juegos de simulación
David J Whipple
Hayley Newsome CV Current
La flauta mágica
Ambiente
Bioelementos
Ad

Similar to Bidirectional Programming for Self-adaptive Software (20)

PDF
The never changing face of immutability
PDF
Building a DSL with GraalVM (CodeOne)
PDF
Refactoring to Macros with Clojure
KEY
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
ODP
Introduction to Domain-Driven Design
PDF
Emerging Languages: A Tour of the Horizon
PDF
Building a DSL with GraalVM (VoxxedDays Luxembourg)
PDF
Programming Languages: some news for the last N years
PDF
JIP Pipeline System Introduction
PDF
libuv, NodeJS and everything in between
KEY
Playing With Fire - An Introduction to Node.js
ODP
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
ODP
Intravert Server side processing for Cassandra
PDF
Working With a Real-World Dataset in Neo4j: Import and Modeling
KEY
dotCloud and go
PDF
Infrastructure-as-code: bridging the gap between Devs and Ops
PPTX
Powershell for Log Analysis and Data Crunching
PDF
Drinking from the Elixir Fountain of Resilience
PDF
Writing Redis in Python with asyncio
PDF
Is writing performant code too expensive?
The never changing face of immutability
Building a DSL with GraalVM (CodeOne)
Refactoring to Macros with Clojure
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Introduction to Domain-Driven Design
Emerging Languages: A Tour of the Horizon
Building a DSL with GraalVM (VoxxedDays Luxembourg)
Programming Languages: some news for the last N years
JIP Pipeline System Introduction
libuv, NodeJS and everything in between
Playing With Fire - An Introduction to Node.js
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
Intravert Server side processing for Cassandra
Working With a Real-World Dataset in Neo4j: Import and Modeling
dotCloud and go
Infrastructure-as-code: bridging the gap between Devs and Ops
Powershell for Log Analysis and Data Crunching
Drinking from the Elixir Fountain of Resilience
Writing Redis in Python with asyncio
Is writing performant code too expensive?

Recently uploaded (20)

PDF
top salesforce developer skills in 2025.pdf
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PPTX
Transform Your Business with a Software ERP System
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PPTX
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PDF
Designing Intelligence for the Shop Floor.pdf
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PDF
medical staffing services at VALiNTRY
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
Nekopoi APK 2025 free lastest update
PDF
Digital Systems & Binary Numbers (comprehensive )
PDF
System and Network Administraation Chapter 3
top salesforce developer skills in 2025.pdf
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Navsoft: AI-Powered Business Solutions & Custom Software Development
Upgrade and Innovation Strategies for SAP ERP Customers
Wondershare Filmora 15 Crack With Activation Key [2025
2025 Textile ERP Trends: SAP, Odoo & Oracle
Transform Your Business with a Software ERP System
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
How to Choose the Right IT Partner for Your Business in Malaysia
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Designing Intelligence for the Shop Floor.pdf
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
medical staffing services at VALiNTRY
How to Migrate SBCGlobal Email to Yahoo Easily
Reimagine Home Health with the Power of Agentic AI​
Nekopoi APK 2025 free lastest update
Digital Systems & Binary Numbers (comprehensive )
System and Network Administraation Chapter 3

Bidirectional Programming for Self-adaptive Software

  • 1. BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE Lionel Montrieux, NII
 <lionel@nii.ac.jp> based on discussions with Sebastian Uchitel (U. of Buenos Aires), Zhenjiang Hu (NII),Tao Zan (NII, SOKENDAI), Zirun Zhu (NII, SOKENDAI)
  • 2. TAKE AWAY: BIDIRECTIONAL PROGRAMS ARE AWESOME,ANDYOU SHOULD USETHEM.
  • 3. WHAT IS A BIDIRECTIONAL TRANSFORMATION? get :: Source -> View put :: Source -> View -> Source S S’ V V’ get put [BX]
  • 4. WHAT IS A WELL- BEHAVED BIDIRECTIONAL TRANSFORMATION? GetPut: put s (get s) = s S S V get put [BX]
  • 5. WHAT IS A WELL- BEHAVED BIDIRECTIONAL TRANSFORMATION? PutGet: get(put s v) = v S S’ V put get [BX]
  • 6. BIDIRECTIONAL PROGRAMS (BIFLUX) • calendar • event (work) • name: Meeting • date: 9 April 2015, 15:00 • location: room 2005 • notes: prepare slides • event (private) • name: Complaint • date: 9 April 2015, 17:00 • location: pet shop • notes: dead parrot • calview • event (work) • name: Meeting • date: 9 April 2015, 15:00 • location: room 2005 [BiFluX, SACMAT]
  • 7. BIDIRECTIONAL PROGRAMS (BIFLUX) UPDATE $event IN $source/event BY MATCH -> REPLACE $event/starttime WITH $starttime; REPLACE $event/endtime WITH $endtime; REPLACE $event/location WITH $location | UNMATCHV -> CREATE VALUE <event> <starttime/> <endtime/> <name/> <note>nothing</note> <location/> <private>False</private> </event> | UNMATCHS -> DELETE . FOR VIEW event[$starttime AS v:starttime, $endtime AS v:endtime, $name AS v:name, $location AS v:location] IN $view/* MATCHING SOURCE BY $event/name VIEW BY $name WHERE private/text() = 'False' [BiFluX, SACMAT]
  • 8. BIDIRECTIONAL PROGRAMS (BIGUL) source DTD view DTDBiFluX update BiFluX BiGUL updatesource type view type BiGUL BX executable
  • 9. BIDIRECTIONAL PROGRAMS (BIGUL - SRC) type ApiCalls = [SCall] type SCall = (SPermissions, (File, (Line, (Protected, Deleted)))) type File = String type Line = Int type Deleted = Bool type Name = String type SPermissions = [SPermission] type SPermission = (Name, [ApiVersion]) type Protected = String type ApiVersion = String
  • 10. BIDIRECTIONAL PROGRAMS (BIGUL - SRC) type Calls = [VCall] type VCall = (File, (Line, VPermissions)) type VPermissions = [VPermission] type VPermission = Name
  • 11. BIDIRECTIONAL PROGRAMS (BIGUL - UPD) t :: MonadError' e m => ApiVersion -> BiGUL m ApiCalls Calls t ver = Align ((ps, (f, (l, (ptd, del)))) -> return (not del)) ((_, (f, (l, _))) (f', (l', _)) -> return (f == f' && l == l')) (Rearr (RVar `RProd` (RVar `RProd` RVar)) (EDir (DRight (DRight DVar)) `EProd` (EDir (DLeft DVar) `EProd` (EDir (DRight (DLeft DVar)) `EProd` (EConst () `EProd` EConst ())))) (Update (UVar (Align ((_, vers) -> return (ver `elem` vers)) (_ _ -> return True) (Rearr RVar (EDir DVar `EProd` EConst ()) (Update (UVar Replace `UProd` UVar Skip))) (_ -> return ("", [ver])) (_ -> return Nothing)) `UProd` (UVar Replace `UProd` (UVar Replace `UProd` (UVar Skip `UProd` UVar Skip)))))) (_ -> return ([], ("", (0, ("", False))))) ((ps, (f, (l, (ptd, del)))) -> return (Just (ps, (f, (l, (ptd, True))))))
  • 12. BP AND SELF-ADAPTATION Where it can help, and what challenges lie ahead S S’ V V’ get put
  • 13. THE NORWEGIAN BLUE, INC. online pet shop.
  • 14. APACHE WEB SERVER <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/ssl/certs/resting.norwegianblue.com.pem SSLCertificateKeyFile /etc/ssl/private/resting.norwegianblue.com.key SSLProtocol TLSv1:TLSv1.1:TLSv1.2 SSLCipherSuite EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH +ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH +aRSA:!RC4:!aNULL:!eNULL:!LOW :3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!EXPORT:!aECDH:! EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA <Directory /var/www/norwegianblue> AllowOverride All </Directory> DocumentRoot /var/www/norwegianblue ServerName resting.norwegianblue.com </VirtualHost>
  • 16. SELF-ADAPTATION Keeping the configuration secure M A P E Apache configuration (.conf)CVE DB service apache2 reload
  • 17. NGINX SERVERserver { listen 443 ssl; server_name stunned.norwegianblue.com; ssl_certificate /etc/ssl/certs/ stunned.norwegianblue.com.pem; ssl_certificate_key /etc/ssl/private/ stunned.norwegianblue.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH +aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH +ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH +aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH +aRSA !RC4 !aNULL !eNULL !LOW !3DES ! MD5 !EXP !PSK !SRP !DSS !EXPORT ! aECDH !EDH-DSS-DES-CBC3-SHA !EDH-RSA- DES-CBC3-SHA !KRB5-DES-CBC3-SHA"; ssl_dhparam /etc/ssl/dhparams.pem; # Path to the root of your installation root /var/www/norwegianblue/; # set max upload size client_max_body_size 10G; fastcgi_buffers 64 4K; location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ ^/(?:.htaccess|data|config|db_st deny all; } }
  • 18. AN ABSTRACT LAYER Bidirectional programming for abstraction and migration Apache conf Nginx confCVE DB service mgr Abstract model M A P E BXBX
  • 19. A SMALL MODEL IS A GOOD MODEL Bidirectional programming to the rescue, again Abstract layer M A P E Abstract SSL layer BX
  • 20. THE SMALLERTHE BETTER Model size may vary at runtime Abstract layer M A P E Abstract SSL layer BX
  • 21. MULTIPLE SMALL MODELS N loops Abstract layer SSL BX MAPE Python BX MAPE access BX MAPE
  • 22. SYNCHRONISATION Straightforward, with bidirectional transformations Abstract layer SSL BX MAPE Python BX MAPE access BX MAPE Python’ Abstract layer’ access’
  • 23. BEYOND SELF-CONFIGURATION current system vs. desired system Concrete layer System Abstract layer current state desired stateAWS APIAWS API BX
  • 24. DELTA Bidirectional programs to the rescue, once more! AWS APIAWS API BX Abstract layer System Concrete layer current state current state current state desired state current state + delta current state current state
  • 25. ASSIGNMENT: In small groups, find where bidirectional programs could help you develop self-adaptive systems
  • 27. REFERENCES • [BiFluX]: H. Pacheco,T. Zan, and Z. Hu,“BiFluX:A Bidirectional Functional Update Language for XML,” in 6th International Symposium on Principles and Practice of Declarative Programming (PPDP 2014), 2014. • [BX]: S. Fischer, Z. Hu, and H. Pacheco,“‘Putback’ is the Essence of Bidirectional Programming,” National Institute of Informatics, GRACE-TR 2012-08, Dec. 2012. • [SACMAT]: L. Montrieux and Z. Hu,“Towards Attribute-Based Authorisation for Bidirectional Programming,” 2015, pp. 185–196.
  • 28. IMAGE CREDITS • Poodle by Marcia O’Connor CC-by-nc 2.0 • Python parrot 3 byTaylorHerring CC-by-nc-nd 2.0