bidirectional programming for self-adaptive software
TRANSCRIPT
![Page 1: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/1.jpg)
BIDIRECTIONAL PROGRAMMING FOR SELF-ADAPTIVE SOFTWARE
Lionel Montrieux, NII <[email protected]>
based on discussions with Sebastian Uchitel (U. of Buenos Aires), Zhenjiang Hu (NII), Tao Zan (NII, SOKENDAI), Zirun Zhu (NII, SOKENDAI)
![Page 2: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/2.jpg)
TAKE AWAY: BIDIRECTIONAL PROGRAMS ARE AWESOME, AND YOU
SHOULD USE THEM.
![Page 3: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/3.jpg)
WHAT IS A BIDIRECTIONAL
TRANSFORMATION?
get :: Source -> View
put :: Source -> View -> Source
S
S’
V
V’
get
put
[BX]
![Page 4: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/4.jpg)
WHAT IS A WELL-BEHAVED
BIDIRECTIONAL TRANSFORMATION?
GetPut: put s (get s) = s
S
S
Vget
put
[BX]
![Page 5: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/5.jpg)
WHAT IS A WELL-BEHAVED
BIDIRECTIONAL TRANSFORMATION?
PutGet: get(put s v) = v
S
S’ V
put
get[BX]
![Page 6: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/6.jpg)
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]
![Page 7: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/7.jpg)
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]
![Page 8: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/8.jpg)
BIDIRECTIONAL PROGRAMS (BIGUL)source DTD view DTDBiFluX update
BiFluX
BiGUL updatesource type view type
BiGUL
BX executable
![Page 9: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/9.jpg)
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
![Page 10: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/10.jpg)
BIDIRECTIONAL PROGRAMS (BIGUL - SRC)
type Calls = [VCall] type VCall = (File, (Line, VPermissions)) type VPermissions = [VPermission] type VPermission = Name
![Page 11: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/11.jpg)
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))))))
![Page 12: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/12.jpg)
BP AND SELF-ADAPTATIONWhere it can help, and what challenges lie ahead
S
S’
V
V’
get
put
![Page 13: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/13.jpg)
THE NORWEGIAN BLUE, INC.online pet shop.
![Page 14: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/14.jpg)
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>
![Page 15: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/15.jpg)
POODLECVE-2014-3566
Man-in-the-middle attack on SSLv3
![Page 16: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/16.jpg)
SELF-ADAPTATIONKeeping the configuration secure
M A P E
Apache configuration (.conf)CVE DB service apache2 reload
![Page 17: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/17.jpg)
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_structure\.xml|README){ deny all; } }
![Page 18: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/18.jpg)
AN ABSTRACT LAYERBidirectional programming for abstraction and migration
Apache conf Nginx confCVE DB service mgr
Abstract model
M A P E
BXBX
![Page 19: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/19.jpg)
A SMALL MODEL IS A GOOD MODELBidirectional programming to the rescue, again
Abstract layer
M A P E
Abstract SSL layer
BX
![Page 20: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/20.jpg)
THE SMALLER THE BETTERModel size may vary at runtime
Abstract layer
M A P E
Abstract SSL layer
BX
![Page 21: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/21.jpg)
MULTIPLE SMALL MODELSN loops
Abstract layer
SSL
BX
MAPE
Python
BX
MAPE
access
BX
MAPE
![Page 22: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/22.jpg)
SYNCHRONISATIONStraightforward, with bidirectional transformations
Abstract layer
SSL
BX
MAPE
Python
BX
MAPE
access
BX
MAPE
Python’
Abstract layer’
access’
![Page 23: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/23.jpg)
BEYOND SELF-CONFIGURATIONcurrent system vs. desired system
Concrete layer
System
Abstract layer
current state desired stateAWS APIAWS API
BX
![Page 24: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/24.jpg)
DELTABidirectional 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
![Page 25: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/25.jpg)
ASSIGNMENT: In small groups, find where
bidirectional programs could help you develop self-adaptive systems
![Page 26: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/26.jpg)
S
S’
V
V’
get
put
![Page 27: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/27.jpg)
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.
![Page 28: Bidirectional Programming for Self-adaptive Software](https://reader036.vdocuments.us/reader036/viewer/2022062400/58ac2b051a28abf03a8b684d/html5/thumbnails/28.jpg)
IMAGE CREDITS
• Poodle by Marcia O’Connor CC-by-nc 2.0
• Python parrot 3 by TaylorHerring CC-by-nc-nd 2.0