CINXE.COM
Peter Van Roy | UCLouvain (University of Louvain) - Academia.edu
<!DOCTYPE html> <html lang="en" xmlns:fb="http://www.facebook.com/2008/fbml" class="wf-loading"> <head prefix="og: https://ogp.me/ns# fb: https://ogp.me/ns/fb# academia: https://ogp.me/ns/fb/academia#"> <meta charset="utf-8"> <meta name=viewport content="width=device-width, initial-scale=1"> <meta rel="search" type="application/opensearchdescription+xml" href="/open_search.xml" title="Academia.edu"> <title>Peter Van Roy | UCLouvain (University of Louvain) - Academia.edu</title> <!-- _ _ _ | | (_) | | __ _ ___ __ _ __| | ___ _ __ ___ _ __ _ ___ __| |_ _ / _` |/ __/ _` |/ _` |/ _ \ '_ ` _ \| |/ _` | / _ \/ _` | | | | | (_| | (_| (_| | (_| | __/ | | | | | | (_| || __/ (_| | |_| | \__,_|\___\__,_|\__,_|\___|_| |_| |_|_|\__,_(_)___|\__,_|\__,_| We're hiring! See https://www.academia.edu/hiring --> <link href="//a.academia-assets.com/images/favicons/favicon-production.ico" rel="shortcut icon" type="image/vnd.microsoft.icon"> <link rel="apple-touch-icon" sizes="57x57" href="//a.academia-assets.com/images/favicons/apple-touch-icon-57x57.png"> <link rel="apple-touch-icon" sizes="60x60" href="//a.academia-assets.com/images/favicons/apple-touch-icon-60x60.png"> <link rel="apple-touch-icon" sizes="72x72" href="//a.academia-assets.com/images/favicons/apple-touch-icon-72x72.png"> <link rel="apple-touch-icon" sizes="76x76" href="//a.academia-assets.com/images/favicons/apple-touch-icon-76x76.png"> <link rel="apple-touch-icon" sizes="114x114" href="//a.academia-assets.com/images/favicons/apple-touch-icon-114x114.png"> <link rel="apple-touch-icon" sizes="120x120" href="//a.academia-assets.com/images/favicons/apple-touch-icon-120x120.png"> <link rel="apple-touch-icon" sizes="144x144" href="//a.academia-assets.com/images/favicons/apple-touch-icon-144x144.png"> <link rel="apple-touch-icon" sizes="152x152" href="//a.academia-assets.com/images/favicons/apple-touch-icon-152x152.png"> <link rel="apple-touch-icon" sizes="180x180" href="//a.academia-assets.com/images/favicons/apple-touch-icon-180x180.png"> <link rel="icon" type="image/png" href="//a.academia-assets.com/images/favicons/favicon-32x32.png" sizes="32x32"> <link rel="icon" type="image/png" href="//a.academia-assets.com/images/favicons/favicon-194x194.png" sizes="194x194"> <link rel="icon" type="image/png" href="//a.academia-assets.com/images/favicons/favicon-96x96.png" sizes="96x96"> <link rel="icon" type="image/png" href="//a.academia-assets.com/images/favicons/android-chrome-192x192.png" sizes="192x192"> <link rel="icon" type="image/png" href="//a.academia-assets.com/images/favicons/favicon-16x16.png" sizes="16x16"> <link rel="manifest" href="//a.academia-assets.com/images/favicons/manifest.json"> <meta name="msapplication-TileColor" content="#2b5797"> <meta name="msapplication-TileImage" content="//a.academia-assets.com/images/favicons/mstile-144x144.png"> <meta name="theme-color" content="#ffffff"> <script> window.performance && window.performance.measure && window.performance.measure("Time To First Byte", "requestStart", "responseStart"); </script> <script> (function() { if (!window.URLSearchParams || !window.history || !window.history.replaceState) { return; } var searchParams = new URLSearchParams(window.location.search); var paramsToDelete = [ 'fs', 'sm', 'swp', 'iid', 'nbs', 'rcc', // related content category 'rcpos', // related content carousel position 'rcpg', // related carousel page 'rchid', // related content hit id 'f_ri', // research interest id, for SEO tracking 'f_fri', // featured research interest, for SEO tracking (param key without value) 'f_rid', // from research interest directory for SEO tracking 'f_loswp', // from research interest pills on LOSWP sidebar for SEO tracking 'rhid', // referrring hit id ]; if (paramsToDelete.every((key) => searchParams.get(key) === null)) { return; } paramsToDelete.forEach((key) => { searchParams.delete(key); }); var cleanUrl = new URL(window.location.href); cleanUrl.search = searchParams.toString(); history.replaceState({}, document.title, cleanUrl); })(); </script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-5VKX33P2DS"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-5VKX33P2DS', { cookie_domain: 'academia.edu', send_page_view: false, }); gtag('event', 'page_view', { 'controller': "profiles/works", 'action': "summary", 'controller_action': 'profiles/works#summary', 'logged_in': 'false', 'edge': 'unknown', // Send nil if there is no A/B test bucket, in case some records get logged // with missing data - that way we can distinguish between the two cases. // ab_test_bucket should be of the form <ab_test_name>:<bucket> 'ab_test_bucket': null, }) </script> <script type="text/javascript"> window.sendUserTiming = function(timingName) { if (!(window.performance && window.performance.measure)) return; var entries = window.performance.getEntriesByName(timingName, "measure"); if (entries.length !== 1) return; var timingValue = Math.round(entries[0].duration); gtag('event', 'timing_complete', { name: timingName, value: timingValue, event_category: 'User-centric', }); }; window.sendUserTiming("Time To First Byte"); </script> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="XKs1xRtKxt9ZKR4giTp6xvLUgVCpOjuRHjlD3uddYqkAzI4dCLl__PdwWvqyNNUKnqEA2UONVkX9ylr2J0AQAQ" /> <link rel="stylesheet" media="all" href="//a.academia-assets.com/assets/wow-3d36c19b4875b226bfed0fcba1dcea3f2fe61148383d97c0465c016b8c969290.css" /><link rel="stylesheet" media="all" href="//a.academia-assets.com/assets/social/home-79e78ce59bef0a338eb6540ec3d93b4a7952115b56c57f1760943128f4544d42.css" /><link rel="stylesheet" media="all" href="//a.academia-assets.com/assets/design_system/heading-95367dc03b794f6737f30123738a886cf53b7a65cdef98a922a98591d60063e3.css" /><link rel="stylesheet" media="all" href="//a.academia-assets.com/assets/design_system/button-bfbac2a470372e2f3a6661a65fa7ff0a0fbf7aa32534d9a831d683d2a6f9e01b.css" /><link rel="stylesheet" media="all" href="//a.academia-assets.com/assets/design_system/body-170d1319f0e354621e81ca17054bb147da2856ec0702fe440a99af314a6338c5.css" /><link crossorigin="" href="https://fonts.gstatic.com/" rel="preconnect" /><link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&family=Gupter:wght@400;500;700&family=IBM+Plex+Mono:wght@300;400&family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20,400,0,0&display=swap" rel="stylesheet" /><link rel="stylesheet" media="all" href="//a.academia-assets.com/assets/design_system/common-2b6f90dbd75f5941bc38f4ad716615f3ac449e7398313bb3bc225fba451cd9fa.css" /> <meta name="author" content="peter van roy" /> <meta name="description" content="Peter Van Roy, UCLouvain (University of Louvain): 24 Followers, 10 Following, 210 Research papers. Research interests: Distributed Systems, Distributed…" /> <meta name="google-site-verification" content="bKJMBZA7E43xhDOopFZkssMMkBRjvYERV-NaN4R6mrs" /> <script> var $controller_name = 'works'; var $action_name = "summary"; var $rails_env = 'production'; var $app_rev = 'bbdb80613189ba697977787ab78246749f444764'; var $domain = 'academia.edu'; var $app_host = "academia.edu"; var $asset_host = "academia-assets.com"; var $start_time = new Date().getTime(); var $recaptcha_key = "6LdxlRMTAAAAADnu_zyLhLg0YF9uACwz78shpjJB"; var $recaptcha_invisible_key = "6Lf3KHUUAAAAACggoMpmGJdQDtiyrjVlvGJ6BbAj"; var $disableClientRecordHit = false; </script> <script> window.Aedu = { hit_data: null }; window.Aedu.SiteStats = {"premium_universities_count":14016,"monthly_visitors":"107 million","monthly_visitor_count":107440917,"monthly_visitor_count_in_millions":107,"user_count":283666955,"paper_count":55203019,"paper_count_in_millions":55,"page_count":432000000,"page_count_in_millions":432,"pdf_count":16500000,"pdf_count_in_millions":16}; window.Aedu.serverRenderTime = new Date(1740482135000); window.Aedu.timeDifference = new Date().getTime() - 1740482135000; window.Aedu.isUsingCssV1 = false; window.Aedu.enableLocalization = true; window.Aedu.activateFullstory = false; window.Aedu.serviceAvailability = { status: {"attention_db":"on","bibliography_db":"on","contacts_db":"on","email_db":"on","indexability_db":"on","mentions_db":"on","news_db":"on","notifications_db":"on","offsite_mentions_db":"on","redshift":"on","redshift_exports_db":"on","related_works_db":"on","ring_db":"on","user_tests_db":"on"}, serviceEnabled: function(service) { return this.status[service] === "on"; }, readEnabled: function(service) { return this.serviceEnabled(service) || this.status[service] === "read_only"; }, }; window.Aedu.viewApmTrace = function() { // Check if x-apm-trace-id meta tag is set, and open the trace in APM // in a new window if it is. var apmTraceId = document.head.querySelector('meta[name="x-apm-trace-id"]'); if (apmTraceId) { var traceId = apmTraceId.content; // Use trace ID to construct URL, an example URL looks like: // https://app.datadoghq.com/apm/traces?query=trace_id%31298410148923562634 var apmUrl = 'https://app.datadoghq.com/apm/traces?query=trace_id%3A' + traceId; window.open(apmUrl, '_blank'); } }; </script> <!--[if lt IE 9]> <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script> <![endif]--> <link href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,500,500i,700,700i,900,900i" rel="stylesheet"> <link rel="preload" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" as="style" onload="this.rel='stylesheet'"> <link rel="stylesheet" media="all" href="//a.academia-assets.com/assets/libraries-a9675dcb01ec4ef6aa807ba772c7a5a00c1820d3ff661c1038a20f80d06bb4e4.css" /> <link rel="stylesheet" media="all" href="//a.academia-assets.com/assets/academia-1eb081e01ca8bc0c1b1d866df79d9eb4dd2c484e4beecf76e79a7806c72fee08.css" /> <link rel="stylesheet" media="all" href="//a.academia-assets.com/assets/design_system_legacy-056a9113b9a0f5343d013b29ee1929d5a18be35fdcdceb616600b4db8bd20054.css" /> <script src="//a.academia-assets.com/assets/webpack_bundles/runtime-bundle-005434038af4252ca37c527588411a3d6a0eabb5f727fac83f8bbe7fd88d93bb.js"></script> <script src="//a.academia-assets.com/assets/webpack_bundles/webpack_libraries_and_infrequently_changed.wjs-bundle-0f3bf7f6f3517097948bf4ffb828d255bab326cd7f9daa1b0fac1bbd8d6b6df6.js"></script> <script src="//a.academia-assets.com/assets/webpack_bundles/core_webpack.wjs-bundle-bb770f3e69f95986e63e7c7781a4a48d351e700cb7be914bb67d866ee608a254.js"></script> <script src="//a.academia-assets.com/assets/webpack_bundles/sentry.wjs-bundle-5fe03fddca915c8ba0f7edbe64c194308e8ce5abaed7bffe1255ff37549c4808.js"></script> <script> jade = window.jade || {}; jade.helpers = window.$h; jade._ = window._; </script> <!-- Google Tag Manager --> <script id="tag-manager-head-root">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer_old','GTM-5G9JF7Z');</script> <!-- End Google Tag Manager --> <script> window.gptadslots = []; window.googletag = window.googletag || {}; window.googletag.cmd = window.googletag.cmd || []; </script> <script type="text/javascript"> // TODO(jacob): This should be defined, may be rare load order problem. // Checking if null is just a quick fix, will default to en if unset. // Better fix is to run this immedietely after I18n is set. if (window.I18n != null) { I18n.defaultLocale = "en"; I18n.locale = "en"; I18n.fallbacks = true; } </script> <link rel="canonical" href="https://uclouvain.academia.edu/PeterVanRoy" /> </head> <!--[if gte IE 9 ]> <body class='ie ie9 c-profiles/works a-summary logged_out'> <![endif]--> <!--[if !(IE) ]><!--> <body class='c-profiles/works a-summary logged_out'> <!--<![endif]--> <div id="fb-root"></div><script>window.fbAsyncInit = function() { FB.init({ appId: "2369844204", version: "v8.0", status: true, cookie: true, xfbml: true }); // Additional initialization code. if (window.InitFacebook) { // facebook.ts already loaded, set it up. window.InitFacebook(); } else { // Set a flag for facebook.ts to find when it loads. window.academiaAuthReadyFacebook = true; } };</script><script>window.fbAsyncLoad = function() { // Protection against double calling of this function if (window.FB) { return; } (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); } if (!window.defer_facebook) { // Autoload if not deferred window.fbAsyncLoad(); } else { // Defer loading by 5 seconds setTimeout(function() { window.fbAsyncLoad(); }, 5000); }</script> <div id="google-root"></div><script>window.loadGoogle = function() { if (window.InitGoogle) { // google.ts already loaded, set it up. window.InitGoogle("331998490334-rsn3chp12mbkiqhl6e7lu2q0mlbu0f1b"); } else { // Set a flag for google.ts to use when it loads. window.GoogleClientID = "331998490334-rsn3chp12mbkiqhl6e7lu2q0mlbu0f1b"; } };</script><script>window.googleAsyncLoad = function() { // Protection against double calling of this function (function(d) { var js; var id = 'google-jssdk'; var ref = d.getElementsByTagName('script')[0]; if (d.getElementById(id)) { return; } js = d.createElement('script'); js.id = id; js.async = true; js.onload = loadGoogle; js.src = "https://accounts.google.com/gsi/client" ref.parentNode.insertBefore(js, ref); }(document)); } if (!window.defer_google) { // Autoload if not deferred window.googleAsyncLoad(); } else { // Defer loading by 5 seconds setTimeout(function() { window.googleAsyncLoad(); }, 5000); }</script> <div id="tag-manager-body-root"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5G9JF7Z" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <!-- Event listeners for analytics --> <script> window.addEventListener('load', function() { if (document.querySelector('input[name="commit"]')) { document.querySelector('input[name="commit"]').addEventListener('click', function() { gtag('event', 'click', { event_category: 'button', event_label: 'Log In' }) }) } }); </script> </div> <script>var _comscore = _comscore || []; _comscore.push({ c1: "2", c2: "26766707" }); (function() { var s = document.createElement("script"), el = document.getElementsByTagName("script")[0]; s.async = true; s.src = (document.location.protocol == "https:" ? "https://sb" : "http://b") + ".scorecardresearch.com/beacon.js"; el.parentNode.insertBefore(s, el); })();</script><img src="https://sb.scorecardresearch.com/p?c1=2&c2=26766707&cv=2.0&cj=1" style="position: absolute; visibility: hidden" /> <div id='react-modal'></div> <div class='DesignSystem'> <a class='u-showOnFocus' href='#site'> Skip to main content </a> </div> <div id="upgrade_ie_banner" style="display: none;"><p>Academia.edu no longer supports Internet Explorer.</p><p>To browse Academia.edu and the wider internet faster and more securely, please take a few seconds to <a href="https://www.academia.edu/upgrade-browser">upgrade your browser</a>.</p></div><script>// Show this banner for all versions of IE if (!!window.MSInputMethodContext || /(MSIE)/.test(navigator.userAgent)) { document.getElementById('upgrade_ie_banner').style.display = 'block'; }</script> <div class="DesignSystem bootstrap ShrinkableNav"><div class="navbar navbar-default main-header"><div class="container-wrapper" id="main-header-container"><div class="container"><div class="navbar-header"><div class="nav-left-wrapper u-mt0x"><div class="nav-logo"><a data-main-header-link-target="logo_home" href="https://www.academia.edu/"><img class="visible-xs-inline-block" style="height: 24px;" alt="Academia.edu" src="//a.academia-assets.com/images/academia-logo-redesign-2015-A.svg" width="24" height="24" /><img width="145.2" height="18" class="hidden-xs" style="height: 24px;" alt="Academia.edu" src="//a.academia-assets.com/images/academia-logo-redesign-2015.svg" /></a></div><div class="nav-search"><div class="SiteSearch-wrapper select2-no-default-pills"><form class="js-SiteSearch-form DesignSystem" action="https://www.academia.edu/search" accept-charset="UTF-8" method="get"><i class="SiteSearch-icon fa fa-search u-fw700 u-positionAbsolute u-tcGrayDark"></i><input class="js-SiteSearch-form-input SiteSearch-form-input form-control" data-main-header-click-target="search_input" name="q" placeholder="Search" type="text" value="" /></form></div></div></div><div class="nav-right-wrapper pull-right"><ul class="NavLinks js-main-nav list-unstyled"><li class="NavLinks-link"><a class="js-header-login-url Button Button--inverseGray Button--sm u-mb4x" id="nav_log_in" rel="nofollow" href="https://www.academia.edu/login">Log In</a></li><li class="NavLinks-link u-p0x"><a class="Button Button--inverseGray Button--sm u-mb4x" rel="nofollow" href="https://www.academia.edu/signup">Sign Up</a></li></ul><button class="hidden-lg hidden-md hidden-sm u-ml4x navbar-toggle collapsed" data-target=".js-mobile-header-links" data-toggle="collapse" type="button"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button></div></div><div class="collapse navbar-collapse js-mobile-header-links"><ul class="nav navbar-nav"><li class="u-borderColorGrayLight u-borderBottom1"><a rel="nofollow" href="https://www.academia.edu/login">Log In</a></li><li class="u-borderColorGrayLight u-borderBottom1"><a rel="nofollow" href="https://www.academia.edu/signup">Sign Up</a></li><li class="u-borderColorGrayLight u-borderBottom1 js-mobile-nav-expand-trigger"><a href="#">more <span class="caret"></span></a></li><li><ul class="js-mobile-nav-expand-section nav navbar-nav u-m0x collapse"><li class="u-borderColorGrayLight u-borderBottom1"><a rel="false" href="https://www.academia.edu/about">About</a></li><li class="u-borderColorGrayLight u-borderBottom1"><a rel="nofollow" href="https://www.academia.edu/press">Press</a></li><li class="u-borderColorGrayLight u-borderBottom1"><a rel="false" href="https://www.academia.edu/documents">Papers</a></li><li class="u-borderColorGrayLight u-borderBottom1"><a rel="nofollow" href="https://www.academia.edu/terms">Terms</a></li><li class="u-borderColorGrayLight u-borderBottom1"><a rel="nofollow" href="https://www.academia.edu/privacy">Privacy</a></li><li class="u-borderColorGrayLight u-borderBottom1"><a rel="nofollow" href="https://www.academia.edu/copyright">Copyright</a></li><li class="u-borderColorGrayLight u-borderBottom1"><a rel="nofollow" href="https://www.academia.edu/hiring"><i class="fa fa-briefcase"></i> We're Hiring!</a></li><li class="u-borderColorGrayLight u-borderBottom1"><a rel="nofollow" href="https://support.academia.edu/hc/en-us"><i class="fa fa-question-circle"></i> Help Center</a></li><li class="js-mobile-nav-collapse-trigger u-borderColorGrayLight u-borderBottom1 dropup" style="display:none"><a href="#">less <span class="caret"></span></a></li></ul></li></ul></div></div></div><script>(function(){ var $moreLink = $(".js-mobile-nav-expand-trigger"); var $lessLink = $(".js-mobile-nav-collapse-trigger"); var $section = $('.js-mobile-nav-expand-section'); $moreLink.click(function(ev){ ev.preventDefault(); $moreLink.hide(); $lessLink.show(); $section.collapse('show'); }); $lessLink.click(function(ev){ ev.preventDefault(); $moreLink.show(); $lessLink.hide(); $section.collapse('hide'); }); })() if ($a.is_logged_in() || false) { new Aedu.NavigationController({ el: '.js-main-nav', showHighlightedNotification: false }); } else { $(".js-header-login-url").attr("href", $a.loginUrlWithRedirect()); } Aedu.autocompleteSearch = new AutocompleteSearch({el: '.js-SiteSearch-form'});</script></div></div> <div id='site' class='fixed'> <div id="content" class="clearfix"> <script>document.addEventListener('DOMContentLoaded', function(){ var $dismissible = $(".dismissible_banner"); $dismissible.click(function(ev) { $dismissible.hide(); }); });</script> <script src="//a.academia-assets.com/assets/webpack_bundles/profile.wjs-bundle-cc15444cb79edeb8ffc95efe7d12e4ad4e4df656440f173bd09913cdd0643e0d.js" defer="defer"></script><script>$viewedUser = Aedu.User.set_viewed( {"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy","photo":"https://0.academia-photos.com/3547736/1223171/1529439/s65_peter.van_roy.jpg","has_photo":true,"department":{"id":75193,"name":"ICTEAM","url":"https://uclouvain.academia.edu/Departments/ICTEAM/Documents","university":{"id":1769,"name":"UCLouvain (University of Louvain)","url":"https://uclouvain.academia.edu/"}},"position":"Faculty Member","position_id":1,"is_analytics_public":false,"interests":[{"id":36299,"name":"Distributed Systems","url":"https://www.academia.edu/Documents/in/Distributed_Systems"},{"id":440,"name":"Distributed Computing","url":"https://www.academia.edu/Documents/in/Distributed_Computing"},{"id":121361,"name":"Semantic Computing","url":"https://www.academia.edu/Documents/in/Semantic_Computing"},{"id":66634,"name":"Complex Event Processing","url":"https://www.academia.edu/Documents/in/Complex_Event_Processing"},{"id":26860,"name":"Cloud Computing","url":"https://www.academia.edu/Documents/in/Cloud_Computing"},{"id":931931,"name":"VoIP/SIP/IMS","url":"https://www.academia.edu/Documents/in/VoIP_SIP_IMS"},{"id":898202,"name":"P2P/Overlay Networks","url":"https://www.academia.edu/Documents/in/P2P_Overlay_Networks"},{"id":2009,"name":"Data Mining","url":"https://www.academia.edu/Documents/in/Data_Mining"},{"id":2008,"name":"Machine Learning","url":"https://www.academia.edu/Documents/in/Machine_Learning"},{"id":931932,"name":"Distributed Information Systems","url":"https://www.academia.edu/Documents/in/Distributed_Information_Systems"},{"id":65430,"name":"Cyber Physical Systems","url":"https://www.academia.edu/Documents/in/Cyber_Physical_Systems"},{"id":54788,"name":"Smart spaces","url":"https://www.academia.edu/Documents/in/Smart_spaces"},{"id":7798,"name":"Access Control","url":"https://www.academia.edu/Documents/in/Access_Control"},{"id":115676,"name":"Cyber Security","url":"https://www.academia.edu/Documents/in/Cyber_Security"}]} ); if ($a.is_logged_in() && $viewedUser.is_current_user()) { $('body').addClass('profile-viewed-by-owner'); } $socialProfiles = []</script><div id="js-react-on-rails-context" style="display:none" data-rails-context="{"inMailer":false,"i18nLocale":"en","i18nDefaultLocale":"en","href":"https://uclouvain.academia.edu/PeterVanRoy","location":"/PeterVanRoy","scheme":"https","host":"uclouvain.academia.edu","port":null,"pathname":"/PeterVanRoy","search":null,"httpAcceptLanguage":null,"serverSide":false}"></div> <div class="js-react-on-rails-component" style="display:none" data-component-name="ProfileCheckPaperUpdate" data-props="{}" data-trace="false" data-dom-id="ProfileCheckPaperUpdate-react-component-526ec27e-d506-44b7-86b8-86c964e66197"></div> <div id="ProfileCheckPaperUpdate-react-component-526ec27e-d506-44b7-86b8-86c964e66197"></div> <div class="DesignSystem"><div class="onsite-ping" id="onsite-ping"></div></div><div class="profile-user-info DesignSystem"><div class="social-profile-container"><div class="left-panel-container"><div class="user-info-component-wrapper"><div class="user-summary-cta-container"><div class="user-summary-container"><div class="social-profile-avatar-container"><img class="profile-avatar u-positionAbsolute" alt="Peter Van Roy" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/3547736/1223171/1529439/s200_peter.van_roy.jpg" /></div><div class="title-container"><h1 class="ds2-5-heading-sans-serif-sm">Peter Van Roy</h1><div class="affiliations-container fake-truncate js-profile-affiliations"><div><a class="u-tcGrayDarker" href="https://uclouvain.academia.edu/">UCLouvain (University of Louvain)</a>, <a class="u-tcGrayDarker" href="https://uclouvain.academia.edu/Departments/ICTEAM/Documents">ICTEAM</a>, <span class="u-tcGrayDarker">Faculty Member</span></div></div></div></div><div class="sidebar-cta-container"><button class="ds2-5-button hidden profile-cta-button grow js-profile-follow-button" data-broccoli-component="user-info.follow-button" data-click-track="profile-user-info-follow-button" data-follow-user-fname="Peter" data-follow-user-id="3547736" data-follow-user-source="profile_button" data-has-google="false"><span class="material-symbols-outlined" style="font-size: 20px" translate="no">add</span>Follow</button><button class="ds2-5-button hidden profile-cta-button grow js-profile-unfollow-button" data-broccoli-component="user-info.unfollow-button" data-click-track="profile-user-info-unfollow-button" data-unfollow-user-id="3547736"><span class="material-symbols-outlined" style="font-size: 20px" translate="no">done</span>Following</button></div></div><div class="user-stats-container"><a><div class="stat-container js-profile-followers"><p class="label">Followers</p><p class="data">24</p></div></a><a><div class="stat-container js-profile-followees" data-broccoli-component="user-info.followees-count" data-click-track="profile-expand-user-info-following"><p class="label">Following</p><p class="data">10</p></div></a><div class="js-mentions-count-container" style="display: none;"><a href="/PeterVanRoy/mentions"><div class="stat-container"><p class="label">Mentions</p><p class="data"></p></div></a></div><span><div class="stat-container"><p class="label"><span class="js-profile-total-view-text">Public Views</span></p><p class="data"><span class="js-profile-view-count"></span></p></div></span></div><div class="suggested-academics-container"><div class="suggested-academics--header"><p class="ds2-5-body-md-bold">Related Authors</p></div><ul class="suggested-user-card-list"><div class="suggested-user-card"><div class="suggested-user-card__avatar social-profile-avatar-container"><a href="https://ksu.academia.edu/DavidSeamon"><img class="profile-avatar u-positionAbsolute" alt="David Seamon" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/93547/25922/29662134/s200_david.seamon.jpg" /></a></div><div class="suggested-user-card__user-info"><a class="suggested-user-card__user-info__header ds2-5-body-sm-bold ds2-5-body-link" href="https://ksu.academia.edu/DavidSeamon">David Seamon</a><p class="suggested-user-card__user-info__subheader ds2-5-body-xs">Kansas State University</p></div></div><div class="suggested-user-card"><div class="suggested-user-card__avatar social-profile-avatar-container"><a href="https://cria.academia.edu/ArmandoMarquesGuedes"><img class="profile-avatar u-positionAbsolute" alt="Armando Marques-Guedes" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/134181/3401094/148494125/s200_armando.marques-guedes.png" /></a></div><div class="suggested-user-card__user-info"><a class="suggested-user-card__user-info__header ds2-5-body-sm-bold ds2-5-body-link" href="https://cria.academia.edu/ArmandoMarquesGuedes">Armando Marques-Guedes</a><p class="suggested-user-card__user-info__subheader ds2-5-body-xs">UNL - New University of Lisbon</p></div></div><div class="suggested-user-card"><div class="suggested-user-card__avatar social-profile-avatar-container"><a href="https://ehu.academia.edu/NoeCornago"><img class="profile-avatar u-positionAbsolute" alt="Noe Cornago" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/171812/147649/155481903/s200_noe.cornago.png" /></a></div><div class="suggested-user-card__user-info"><a class="suggested-user-card__user-info__header ds2-5-body-sm-bold ds2-5-body-link" href="https://ehu.academia.edu/NoeCornago">Noe Cornago</a><p class="suggested-user-card__user-info__subheader ds2-5-body-xs">University of the Basque Country, Euskal Herriko Unibertsitatea</p></div></div><div class="suggested-user-card"><div class="suggested-user-card__avatar social-profile-avatar-container"><a href="https://mq.academia.edu/JohnSutton"><img class="profile-avatar u-positionAbsolute" alt="John Sutton" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/176044/43811/40295/s200_john.sutton.jpg" /></a></div><div class="suggested-user-card__user-info"><a class="suggested-user-card__user-info__header ds2-5-body-sm-bold ds2-5-body-link" href="https://mq.academia.edu/JohnSutton">John Sutton</a><p class="suggested-user-card__user-info__subheader ds2-5-body-xs">Macquarie University</p></div></div><div class="suggested-user-card"><div class="suggested-user-card__avatar social-profile-avatar-container"><a href="https://neu-tr.academia.edu/IbrahimCahit"><img class="profile-avatar u-positionAbsolute" alt="Ibrahim Cahit" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/326139/99351/17873287/s200_ibrahim.cahit.jpg" /></a></div><div class="suggested-user-card__user-info"><a class="suggested-user-card__user-info__header ds2-5-body-sm-bold ds2-5-body-link" href="https://neu-tr.academia.edu/IbrahimCahit">Ibrahim Cahit</a><p class="suggested-user-card__user-info__subheader ds2-5-body-xs">Near East University</p></div></div><div class="suggested-user-card"><div class="suggested-user-card__avatar social-profile-avatar-container"><a href="https://bracu.academia.edu/AnnajiatRasel"><img class="profile-avatar u-positionAbsolute" alt="Annajiat Alim Rasel" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/888279/16496603/16839130/s200_annajiat.rasel.jpg" /></a></div><div class="suggested-user-card__user-info"><a class="suggested-user-card__user-info__header ds2-5-body-sm-bold ds2-5-body-link" href="https://bracu.academia.edu/AnnajiatRasel">Annajiat Alim Rasel</a><p class="suggested-user-card__user-info__subheader ds2-5-body-xs">BRAC University</p></div></div><div class="suggested-user-card"><div class="suggested-user-card__avatar social-profile-avatar-container"><a href="https://ege.academia.edu/OzguCan"><img class="profile-avatar u-positionAbsolute" alt="Ozgu Can" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/1396942/506153/890196/s200_ozgu.can.jpg" /></a></div><div class="suggested-user-card__user-info"><a class="suggested-user-card__user-info__header ds2-5-body-sm-bold ds2-5-body-link" href="https://ege.academia.edu/OzguCan">Ozgu Can</a><p class="suggested-user-card__user-info__subheader ds2-5-body-xs">Ege University</p></div></div><div class="suggested-user-card"><div class="suggested-user-card__avatar social-profile-avatar-container"><a href="https://ingenst.academia.edu/SajadinSembiring"><img class="profile-avatar u-positionAbsolute" alt="Sajadin Sembiring" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/1862697/632229/784381/s200_sajadin.sembiring.jpg" /></a></div><div class="suggested-user-card__user-info"><a class="suggested-user-card__user-info__header ds2-5-body-sm-bold ds2-5-body-link" href="https://ingenst.academia.edu/SajadinSembiring">Sajadin Sembiring</a><p class="suggested-user-card__user-info__subheader ds2-5-body-xs">Universitas Sumatera Utara</p></div></div><div class="suggested-user-card"><div class="suggested-user-card__avatar social-profile-avatar-container"><a href="https://independent.academia.edu/JournalofComputerScienceIJCSIS"><img class="profile-avatar u-positionAbsolute" alt="Journal of Computer Science IJCSIS" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/2328357/8085511/9052483/s200_journal_of_computer_science.ijcsis.jpg" /></a></div><div class="suggested-user-card__user-info"><a class="suggested-user-card__user-info__header ds2-5-body-sm-bold ds2-5-body-link" href="https://independent.academia.edu/JournalofComputerScienceIJCSIS">Journal of Computer Science IJCSIS</a></div></div><div class="suggested-user-card"><div class="suggested-user-card__avatar social-profile-avatar-container"><a href="https://uni-mysore.academia.edu/ALIMOULAEINEJAD"><img class="profile-avatar u-positionAbsolute" alt="ALI MOULAEI NEJAD" border="0" onerror="if (this.src != '//a.academia-assets.com/images/s200_no_pic.png') this.src = '//a.academia-assets.com/images/s200_no_pic.png';" width="200" height="200" src="https://0.academia-photos.com/2363014/744683/18272526/s200_ali.moulaei_nejad.jpg" /></a></div><div class="suggested-user-card__user-info"><a class="suggested-user-card__user-info__header ds2-5-body-sm-bold ds2-5-body-link" href="https://uni-mysore.academia.edu/ALIMOULAEINEJAD">ALI MOULAEI NEJAD</a><p class="suggested-user-card__user-info__subheader ds2-5-body-xs">University of Mysore</p></div></div></ul></div><div class="ri-section"><div class="ri-section-header"><span>Interests</span><a class="ri-more-link js-profile-ri-list-card" data-click-track="profile-user-info-primary-research-interest" data-has-card-for-ri-list="3547736">View All (14)</a></div><div class="ri-tags-container"><a data-click-track="profile-user-info-expand-research-interests" data-has-card-for-ri-list="3547736" href="https://www.academia.edu/Documents/in/Distributed_Systems"><div id="js-react-on-rails-context" style="display:none" data-rails-context="{"inMailer":false,"i18nLocale":"en","i18nDefaultLocale":"en","href":"https://uclouvain.academia.edu/PeterVanRoy","location":"/PeterVanRoy","scheme":"https","host":"uclouvain.academia.edu","port":null,"pathname":"/PeterVanRoy","search":null,"httpAcceptLanguage":null,"serverSide":false}"></div> <div class="js-react-on-rails-component" style="display:none" data-component-name="Pill" data-props="{"color":"gray","children":["Distributed Systems"]}" data-trace="false" data-dom-id="Pill-react-component-ce052399-739b-46a5-a9bd-658fda9ffb29"></div> <div id="Pill-react-component-ce052399-739b-46a5-a9bd-658fda9ffb29"></div> </a><a data-click-track="profile-user-info-expand-research-interests" data-has-card-for-ri-list="3547736" href="https://www.academia.edu/Documents/in/Distributed_Computing"><div class="js-react-on-rails-component" style="display:none" data-component-name="Pill" data-props="{"color":"gray","children":["Distributed Computing"]}" data-trace="false" data-dom-id="Pill-react-component-72b2ba98-b0f0-4e08-b487-e9a469ac634d"></div> <div id="Pill-react-component-72b2ba98-b0f0-4e08-b487-e9a469ac634d"></div> </a><a data-click-track="profile-user-info-expand-research-interests" data-has-card-for-ri-list="3547736" href="https://www.academia.edu/Documents/in/Semantic_Computing"><div class="js-react-on-rails-component" style="display:none" data-component-name="Pill" data-props="{"color":"gray","children":["Semantic Computing"]}" data-trace="false" data-dom-id="Pill-react-component-43914f51-546f-4dc6-b9cb-582286debf01"></div> <div id="Pill-react-component-43914f51-546f-4dc6-b9cb-582286debf01"></div> </a><a data-click-track="profile-user-info-expand-research-interests" data-has-card-for-ri-list="3547736" href="https://www.academia.edu/Documents/in/Complex_Event_Processing"><div class="js-react-on-rails-component" style="display:none" data-component-name="Pill" data-props="{"color":"gray","children":["Complex Event Processing"]}" data-trace="false" data-dom-id="Pill-react-component-8274af32-3128-4501-a84a-9fa884738afe"></div> <div id="Pill-react-component-8274af32-3128-4501-a84a-9fa884738afe"></div> </a><a data-click-track="profile-user-info-expand-research-interests" data-has-card-for-ri-list="3547736" href="https://www.academia.edu/Documents/in/Cloud_Computing"><div class="js-react-on-rails-component" style="display:none" data-component-name="Pill" data-props="{"color":"gray","children":["Cloud Computing"]}" data-trace="false" data-dom-id="Pill-react-component-b14a3a07-3b6f-49ce-9e2c-61e1b45ddcaa"></div> <div id="Pill-react-component-b14a3a07-3b6f-49ce-9e2c-61e1b45ddcaa"></div> </a></div></div></div></div><div class="right-panel-container"><div class="user-content-wrapper"><div class="uploads-container" id="social-redesign-work-container"><div class="upload-header"><h2 class="ds2-5-heading-sans-serif-xs">Uploads</h2></div><div class="documents-container backbone-social-profile-documents" style="width: 100%;"><div class="u-taCenter"></div><div class="profile--tab_content_container js-tab-pane tab-pane active" id="all"><div class="profile--tab_heading_container js-section-heading" data-section="Papers" id="Papers"><h3 class="profile--tab_heading_container">Papers by Peter Van Roy</h3></div><div class="js-work-strip profile--work_container" data-work-id="125984100"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/125984100/Teaching_Programming_Broadly_and_Deeply_The_Kernel_Language_Approach"><img alt="Research paper thumbnail of Teaching Programming Broadly and Deeply: The Kernel Language Approach" class="work-thumbnail" src="https://attachments.academia-assets.com/119931348/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/125984100/Teaching_Programming_Broadly_and_Deeply_The_Kernel_Language_Approach">Teaching Programming Broadly and Deeply: The Kernel Language Approach</a></div><div class="wp-workCard_item"><span>Springer eBooks</span><span>, 2003</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">We present the kernel language approach; a new way to teach programming that situates most of the...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">We present the kernel language approach; a new way to teach programming that situates most of the widely known programming paradigms (including imperative, object-oriented, concurrent, logic, and functional) into a uniform setting that shows their deep relationships and how to use them together. Widely different practical languages (exemplified by Java, Haskell, Prolog, and Erlang) with their rich panoplies of abstractions and syntax are explained by straightforward translations into closely related kernel languages, simple languages that consist of small numbers of programmer-significant concepts. Kernel languages are easy to understand and have a simple formal semantics that can be used by practicing programmers to reason about correctness and complexity.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="5926fcb39d2fb3463848e390bb635b72" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":119931348,"asset_id":125984100,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/119931348/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="125984100"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="125984100"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 125984100; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=125984100]").text(description); $(".js-view-count[data-work-id=125984100]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 125984100; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='125984100']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "5926fcb39d2fb3463848e390bb635b72" } } $('.js-work-strip[data-work-id=125984100]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":125984100,"title":"Teaching Programming Broadly and Deeply: The Kernel Language Approach","internal_url":"https://www.academia.edu/125984100/Teaching_Programming_Broadly_and_Deeply_The_Kernel_Language_Approach","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":119931348,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/119931348/thumbnails/1.jpg","file_name":"10.1007_2F978-0-387-35619-8_6.pdf","download_url":"https://www.academia.edu/attachments/119931348/download_file","bulk_download_file_name":"Teaching_Programming_Broadly_and_Deeply.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/119931348/10.1007_2F978-0-387-35619-8_6-libre.pdf?1733069887=\u0026response-content-disposition=attachment%3B+filename%3DTeaching_Programming_Broadly_and_Deeply.pdf\u0026Expires=1740485735\u0026Signature=C8jJCHMPpcFd28q-6nlsOIGFdHD0E24XFMUa1YWuP2VlEj90u~gkm4h1YSJL~046kGFlad2H32zZMqRp0nilnTGuVjAwRI5JvkKxXrhS0CYg1EBCOu5CUll-Uo2vQQ9IZnTlJIl9Gdo10sCPCUGUOnUVa8zW~O~SR371bHxRrEWNqOirRwZY1dXGjajN1R9auOuCx04pUOD4SjVBlOc0vI-nreGUu3693R6PX5X5NVQmqMjMbMXCOqwphA-gljDgKrfZ3Azz85uLMDugvFd7ZLoiEExt5xZirIMd~bmq3KscP3uMilO39X~igFKnBWokWnWVRykCiIMx8dmPLHmpeg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"},{"id":119931351,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/119931351/thumbnails/1.jpg","file_name":"10.1007_2F978-0-387-35619-8_6.pdf","download_url":"https://www.academia.edu/attachments/119931351/download_file","bulk_download_file_name":"Teaching_Programming_Broadly_and_Deeply.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/119931351/10.1007_2F978-0-387-35619-8_6-libre.pdf?1733069885=\u0026response-content-disposition=attachment%3B+filename%3DTeaching_Programming_Broadly_and_Deeply.pdf\u0026Expires=1740485735\u0026Signature=Mi4VHI~PdGA8Mp-Kwyplpf8g3ztXvVrgICrIqxYMJyKhgz-ooUTlhVaca30AOaqijFfFkRgmYpa6WfTdrLXKquCM32pEzcL2gXOAPWGl~e4iwBBZf1QUqbixN3oIK6Ct0bw~0ssFedvcFfZMmdqC1FmSBybLkOWcn0KcNaF7X1EVhOtc81Sby4~-zJc7ieS1sNei-6af-2FNK9SXX4FKkZ2kqVHNZqEnRYZh2cg9o6ZhDvqiYYfidLRwgPROktoouR03DnjGdHskSF0oBg4PeVBVY-Esjctxa~-vbrdg54eM0cDW8U8jyeJceHafipTQB1wIq8x9rkC8Lfcyeq0Pbw__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="124172471"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/124172471/Algebraic_Reasoning_About_Timeliness"><img alt="Research paper thumbnail of Algebraic Reasoning About Timeliness" class="work-thumbnail" src="https://attachments.academia-assets.com/118446036/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/124172471/Algebraic_Reasoning_About_Timeliness">Algebraic Reasoning About Timeliness</a></div><div class="wp-workCard_item"><span>Electronic Proceedings in Theoretical Computer Science</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Designing distributed systems to have predictable performance under high load is difficult becaus...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Designing distributed systems to have predictable performance under high load is difficult because of resource exhaustion, non-linearity, and stochastic behaviour. Timeliness, i.e., delivering results within defined time bounds, is a central aspect of predictable performance. In this paper, we focus on timeliness using the ∆Q Systems Development paradigm (∆QSD, developed by PNSol), which computes timeliness by modelling systems observationally using so-called outcome expressions. An outcome expression is a compositional definition of a system's observed behaviour in terms of its basic operations. Given the behaviour of the basic operations, ∆QSD efficiently computes the stochastic behaviour of the whole system including its timeliness. This paper formally proves useful algebraic properties of outcome expressions w.r.t. timeliness. We prove the different algebraic structures the set of outcome expressions form with the different ∆QSD operators and demonstrate why those operators do not form richer structures. We prove or disprove the set of all possible distributivity results on outcome expressions. On our way for disproving 8 of those distributivity results, we develop a technique called properisation, which gives rise to the first body of maths for improper random variables. Finally, we also prove 14 equivalences that have been used in the past in the practice of ∆QSD. An immediate benefit is rewrite rules that can be used for design exploration under established timeliness equivalence. This work is part of an ongoing project to disseminate and build tool support for ∆QSD. The ability to rewrite outcome expressions is essential for efficient tool support. Algebraic Reasoning About Timeliness This paper defines and proves algebraic properties of the ∆QSD operators w.r.t. timeliness, i.e., delivering outcomes within the acceptable time-frames. In this paper, our sole resource of concern is time, although ∆QSD includes other types of resources and their interaction. This theoretical work is part of an ongoing project to disseminate and build tool support for ∆QSD, to make it available to the wide community of system engineers. We base our work on the ∆QSD formalisation given by Haeri et al. [11], which defines outcome expressions and their semantics, and gives a real-world example of ∆QSD taken from the blockchain domain. Contributions This paper gives a firm mathematical foundation for ∆QSD, and uses this to establish important algebraic properties of the ∆QSD operators with respect to timeliness, i.e., when the relevant resource is time. This paper is based on a general model theory of resource analysis for systems specified using outcome expressions [12]. That model theory is the first of its kind and we specialise it using the timeliness analysis recipe that is commonly used in ∆QSD (Definition 3). • We show that the set of outcome expressions forms different algebraic structures with the different ∆QSD operators (Theorems 1-4). • We establish 3 distributivity results in Section 7 about the ∆QSD operators (Theorem 6). • We rule out the formation of certain richer algebraic structures by the set of outcome expressions and the current ∆QSD operators (Remarks 2, 3, and 4).</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="d4813442e62d36724c46dd99915db589" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":118446036,"asset_id":124172471,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/118446036/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="124172471"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="124172471"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 124172471; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=124172471]").text(description); $(".js-view-count[data-work-id=124172471]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 124172471; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='124172471']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "d4813442e62d36724c46dd99915db589" } } $('.js-work-strip[data-work-id=124172471]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":124172471,"title":"Algebraic Reasoning About Timeliness","translated_title":"","metadata":{"publisher":"Open Publishing Association","grobid_abstract":"Designing distributed systems to have predictable performance under high load is difficult because of resource exhaustion, non-linearity, and stochastic behaviour. Timeliness, i.e., delivering results within defined time bounds, is a central aspect of predictable performance. In this paper, we focus on timeliness using the ∆Q Systems Development paradigm (∆QSD, developed by PNSol), which computes timeliness by modelling systems observationally using so-called outcome expressions. An outcome expression is a compositional definition of a system's observed behaviour in terms of its basic operations. Given the behaviour of the basic operations, ∆QSD efficiently computes the stochastic behaviour of the whole system including its timeliness. This paper formally proves useful algebraic properties of outcome expressions w.r.t. timeliness. We prove the different algebraic structures the set of outcome expressions form with the different ∆QSD operators and demonstrate why those operators do not form richer structures. We prove or disprove the set of all possible distributivity results on outcome expressions. On our way for disproving 8 of those distributivity results, we develop a technique called properisation, which gives rise to the first body of maths for improper random variables. Finally, we also prove 14 equivalences that have been used in the past in the practice of ∆QSD. An immediate benefit is rewrite rules that can be used for design exploration under established timeliness equivalence. This work is part of an ongoing project to disseminate and build tool support for ∆QSD. The ability to rewrite outcome expressions is essential for efficient tool support. Algebraic Reasoning About Timeliness This paper defines and proves algebraic properties of the ∆QSD operators w.r.t. timeliness, i.e., delivering outcomes within the acceptable time-frames. In this paper, our sole resource of concern is time, although ∆QSD includes other types of resources and their interaction. This theoretical work is part of an ongoing project to disseminate and build tool support for ∆QSD, to make it available to the wide community of system engineers. We base our work on the ∆QSD formalisation given by Haeri et al. [11], which defines outcome expressions and their semantics, and gives a real-world example of ∆QSD taken from the blockchain domain. Contributions This paper gives a firm mathematical foundation for ∆QSD, and uses this to establish important algebraic properties of the ∆QSD operators with respect to timeliness, i.e., when the relevant resource is time. This paper is based on a general model theory of resource analysis for systems specified using outcome expressions [12]. That model theory is the first of its kind and we specialise it using the timeliness analysis recipe that is commonly used in ∆QSD (Definition 3). • We show that the set of outcome expressions forms different algebraic structures with the different ∆QSD operators (Theorems 1-4). • We establish 3 distributivity results in Section 7 about the ∆QSD operators (Theorem 6). • We rule out the formation of certain richer algebraic structures by the set of outcome expressions and the current ∆QSD operators (Remarks 2, 3, and 4).","publication_name":"Electronic Proceedings in Theoretical Computer Science","grobid_abstract_attachment_id":118446036},"translated_abstract":null,"internal_url":"https://www.academia.edu/124172471/Algebraic_Reasoning_About_Timeliness","translated_internal_url":"","created_at":"2024-09-26T01:27:25.963-07:00","preview_url":null,"current_user_can_edit":null,"current_user_is_owner":null,"owner_id":3547736,"coauthors_can_edit":true,"document_type":"paper","co_author_tags":[],"downloadable_attachments":[{"id":118446036,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/118446036/thumbnails/1.jpg","file_name":"paper.pdf","download_url":"https://www.academia.edu/attachments/118446036/download_file","bulk_download_file_name":"Algebraic_Reasoning_About_Timeliness.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/118446036/paper-libre.pdf?1727343230=\u0026response-content-disposition=attachment%3B+filename%3DAlgebraic_Reasoning_About_Timeliness.pdf\u0026Expires=1738621158\u0026Signature=I4gKqdNegLr7voxCJccTZsg2B4~oslclCzhzxD2Pi19oko-b0GeSbhB~b7IHA9GIsg7lMuM-dGwUR9TQOLQGQjpxKFZEY0iK56u3IhOCQBPm7DQXjd9WVFDN2zK7bxAuFTyKs4bhHlPmAizFBgMGdv-EFA0~2hGkvqgM4B8J19OWyMPUThKIoLTR1ziPP7BO~yLlo-m2ZOv83W7~vwh~UkujIwdCX1k2DWuHRnSqjPpw-kOCb~grrcKqcbU4CLuUNs1Rp5VNWbfRklc0nd3B5QQfA4y~MRPjt9KPYyZVMf32FruW9Woreo3QkZJVaLJ0ZfTu6jGL3YTODCGzkv2TVg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}],"slug":"Algebraic_Reasoning_About_Timeliness","translated_slug":"","page_count":20,"language":"en","content_type":"Work","summary":"Designing distributed systems to have predictable performance under high load is difficult because of resource exhaustion, non-linearity, and stochastic behaviour. Timeliness, i.e., delivering results within defined time bounds, is a central aspect of predictable performance. In this paper, we focus on timeliness using the ∆Q Systems Development paradigm (∆QSD, developed by PNSol), which computes timeliness by modelling systems observationally using so-called outcome expressions. An outcome expression is a compositional definition of a system's observed behaviour in terms of its basic operations. Given the behaviour of the basic operations, ∆QSD efficiently computes the stochastic behaviour of the whole system including its timeliness. This paper formally proves useful algebraic properties of outcome expressions w.r.t. timeliness. We prove the different algebraic structures the set of outcome expressions form with the different ∆QSD operators and demonstrate why those operators do not form richer structures. We prove or disprove the set of all possible distributivity results on outcome expressions. On our way for disproving 8 of those distributivity results, we develop a technique called properisation, which gives rise to the first body of maths for improper random variables. Finally, we also prove 14 equivalences that have been used in the past in the practice of ∆QSD. An immediate benefit is rewrite rules that can be used for design exploration under established timeliness equivalence. This work is part of an ongoing project to disseminate and build tool support for ∆QSD. The ability to rewrite outcome expressions is essential for efficient tool support. Algebraic Reasoning About Timeliness This paper defines and proves algebraic properties of the ∆QSD operators w.r.t. timeliness, i.e., delivering outcomes within the acceptable time-frames. In this paper, our sole resource of concern is time, although ∆QSD includes other types of resources and their interaction. This theoretical work is part of an ongoing project to disseminate and build tool support for ∆QSD, to make it available to the wide community of system engineers. We base our work on the ∆QSD formalisation given by Haeri et al. [11], which defines outcome expressions and their semantics, and gives a real-world example of ∆QSD taken from the blockchain domain. Contributions This paper gives a firm mathematical foundation for ∆QSD, and uses this to establish important algebraic properties of the ∆QSD operators with respect to timeliness, i.e., when the relevant resource is time. This paper is based on a general model theory of resource analysis for systems specified using outcome expressions [12]. That model theory is the first of its kind and we specialise it using the timeliness analysis recipe that is commonly used in ∆QSD (Definition 3). • We show that the set of outcome expressions forms different algebraic structures with the different ∆QSD operators (Theorems 1-4). • We establish 3 distributivity results in Section 7 about the ∆QSD operators (Theorem 6). • We rule out the formation of certain richer algebraic structures by the set of outcome expressions and the current ∆QSD operators (Remarks 2, 3, and 4).","owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":118446036,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/118446036/thumbnails/1.jpg","file_name":"paper.pdf","download_url":"https://www.academia.edu/attachments/118446036/download_file","bulk_download_file_name":"Algebraic_Reasoning_About_Timeliness.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/118446036/paper-libre.pdf?1727343230=\u0026response-content-disposition=attachment%3B+filename%3DAlgebraic_Reasoning_About_Timeliness.pdf\u0026Expires=1738621158\u0026Signature=I4gKqdNegLr7voxCJccTZsg2B4~oslclCzhzxD2Pi19oko-b0GeSbhB~b7IHA9GIsg7lMuM-dGwUR9TQOLQGQjpxKFZEY0iK56u3IhOCQBPm7DQXjd9WVFDN2zK7bxAuFTyKs4bhHlPmAizFBgMGdv-EFA0~2hGkvqgM4B8J19OWyMPUThKIoLTR1ziPP7BO~yLlo-m2ZOv83W7~vwh~UkujIwdCX1k2DWuHRnSqjPpw-kOCb~grrcKqcbU4CLuUNs1Rp5VNWbfRklc0nd3B5QQfA4y~MRPjt9KPYyZVMf32FruW9Woreo3QkZJVaLJ0ZfTu6jGL3YTODCGzkv2TVg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}],"research_interests":[{"id":300,"name":"Mathematics","url":"https://www.academia.edu/Documents/in/Mathematics"},{"id":303,"name":"Algebraic Number Theory","url":"https://www.academia.edu/Documents/in/Algebraic_Number_Theory"},{"id":422,"name":"Computer Science","url":"https://www.academia.edu/Documents/in/Computer_Science"},{"id":749,"name":"Mathematical Economics","url":"https://www.academia.edu/Documents/in/Mathematical_Economics"},{"id":17100,"name":"Theoretical Computer Science","url":"https://www.academia.edu/Documents/in/Theoretical_Computer_Science"},{"id":19997,"name":"Pure Mathematics","url":"https://www.academia.edu/Documents/in/Pure_Mathematics"},{"id":37345,"name":"Discrete Mathematics","url":"https://www.academia.edu/Documents/in/Discrete_Mathematics"},{"id":86034,"name":"Mathematical Analysis","url":"https://www.academia.edu/Documents/in/Mathematical_Analysis"},{"id":1489478,"name":"Programming language","url":"https://www.academia.edu/Documents/in/Programming_language"}],"urls":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="121216550"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/121216550/The_Mozart_constraint_subsystem_system_presentation"><img alt="Research paper thumbnail of The Mozart constraint subsystem: system presentation" class="work-thumbnail" src="https://attachments.academia-assets.com/116154719/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/121216550/The_Mozart_constraint_subsystem_system_presentation">The Mozart constraint subsystem: system presentation</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">We present the current state of a new implementation of the constraint engine for the Mozart prog...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">We present the current state of a new implementation of the constraint engine for the Mozart programming system. Our implementation integrates the Gecode constraint library into the core of Mozart version 2.0. Doing so, we allow users to take advantage of the efficiency of Gecode propagators transparently by maintaining the existing language constraints abstractions. Future Mozart systems can thus benefit from the rapid pace of constraint solving optimizations that are included in each new Gecode version. We use two well-known puzzles to illustrate the system and present all available abstractions.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="7f1af31696d65ce3a1c1d0530a738efb" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":116154719,"asset_id":121216550,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/116154719/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="121216550"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="121216550"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 121216550; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=121216550]").text(description); $(".js-view-count[data-work-id=121216550]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 121216550; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='121216550']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "7f1af31696d65ce3a1c1d0530a738efb" } } $('.js-work-strip[data-work-id=121216550]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":121216550,"title":"The Mozart constraint subsystem: system presentation","internal_url":"https://www.academia.edu/121216550/The_Mozart_constraint_subsystem_system_presentation","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":116154719,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/116154719/thumbnails/1.jpg","file_name":"trics2013_submission_5.pdf","download_url":"https://www.academia.edu/attachments/116154719/download_file","bulk_download_file_name":"The_Mozart_constraint_subsystem_system_p.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/116154719/trics2013_submission_5-libre.pdf?1718786826=\u0026response-content-disposition=attachment%3B+filename%3DThe_Mozart_constraint_subsystem_system_p.pdf\u0026Expires=1740485735\u0026Signature=R50QUPzXF~SBex1IA3AjNQxnLx5AmYD7baV5AzNcMgMcvF7PRipsNtmPkOUk4iobjMZ06bcg5Bx9UrBwdufpEd48u-xd7BWgd9~zRXBqalm0kEw-T5827BMRTntyG-NYThj6WB8VxkjQ3HFN5t~nOMxBoPddsfqshAFJi3SdX5gqutF94GTAevhI4q0PEmEuI3dGOS-lQcz-CgFmmKfBNoNO8ApuGxJEpKlcc9bCl498Dj7whvaaPQBeZAGHLabRJQM7QgmDRKLYVi7IM2GlbXBltHfmndCOTQSRCqc6YxF4ir-jKb9CT6-2dlJ7GYekW7PLPUsh9DsSMy2IGidFAw__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="120575433"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/120575433/Designing_Distributed_Applications_Using_a_Phase_Aware_Reversible_System"><img alt="Research paper thumbnail of Designing Distributed Applications Using a Phase-Aware, Reversible System" class="work-thumbnail" src="https://attachments.academia-assets.com/115680691/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/120575433/Designing_Distributed_Applications_Using_a_Phase_Aware_Reversible_System">Designing Distributed Applications Using a Phase-Aware, Reversible System</a></div><div class="wp-workCard_item"><span>2017 IEEE International Conference on Edge Computing (EDGE)</span><span>, 2017</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Distributed applications will break down or perform poorly when there are too many failures (of n...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Distributed applications will break down or perform poorly when there are too many failures (of nodes and/or communication) in the operating environment. Failures happen frequently on edge networks including mobile and ad hoc networks, but are also unexpectedly common on the general Internet. We propose an approach for designing stressaware distributed applications that can take environment stress into account to improve their behavior. We give a concrete illustration of the approach by targeting applications built on top of a Structured Overlay Network (SON). Our underlying SON is Reversible and Phase-Aware. A system is Reversible if the set of operations it provides is a function (called the reversibility function) of its current stress (i.e., all perturbing effects of the environment, including faults), and does not depend on past stress. Reversibility generalizes standard fault tolerance with nested fault models. When the fault rate goes outside the scope of one model, then it is still inside the next one. In order to approximate the reversibility function we introduce the concept of Phase, which is a per-node property that gives a qualitative measure of the available system operations under the current stress. Phase can be determined with no extra distributed operations. We show that making the phase available to applications allows them to improve their behavior in environments with high and variable stress. We propose a Phase API and we design an application, a collaborative graphic editor, that takes advantage of phase to enhance self-adaptation and selfoptimization properties. Furthermore, we analyze how the application itself can achieve reversibility in the applicationlevel semantics. Using the phase of the underlying node, the application provides an indication to the user regarding its behavior. Thus, the application has improved behavior with respect to the user, i.e., the user can better understand and decide what to do in a high-stress environment.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="2c2bcd228da0ab0a137488e01dc466a3" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":115680691,"asset_id":120575433,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/115680691/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="120575433"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="120575433"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 120575433; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=120575433]").text(description); $(".js-view-count[data-work-id=120575433]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 120575433; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='120575433']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "2c2bcd228da0ab0a137488e01dc466a3" } } $('.js-work-strip[data-work-id=120575433]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":120575433,"title":"Designing Distributed Applications Using a Phase-Aware, Reversible System","internal_url":"https://www.academia.edu/120575433/Designing_Distributed_Applications_Using_a_Phase_Aware_Reversible_System","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":115680691,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/115680691/thumbnails/1.jpg","file_name":"08029257.pdf","download_url":"https://www.academia.edu/attachments/115680691/download_file","bulk_download_file_name":"Designing_Distributed_Applications_Using.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/115680691/08029257-libre.pdf?1717588855=\u0026response-content-disposition=attachment%3B+filename%3DDesigning_Distributed_Applications_Using.pdf\u0026Expires=1740457939\u0026Signature=gm3l1Ri7hvT6nWaKAYgcgpsk8sg0pzYKSxiHee5aBDhPFvpEdCBS5GWT1oxgg9B2Dtw690eeeaBkqai7V64YR85HxBxUEN1RxoYg2zkaT1NcDw5q5Zaymai2Z4Luv1kh9V5roW2mTETlV0zAm47d6J5hweROfg7H3KkXldggHnvKbyZeKLFiE4A-Is3~BCTPXjq7aMppIn8M50h1OUSMstOsOoOPKHqFTAcxocaFbYBlUWrjPHEwWdgecR0Whzh-gjEUV-9kbBow0Sutj3HUTNBjXCn07vjAKvLJ9hqAaQzlOY3Lma7bhbFQcUWiRwDyovRH8h3q0bhCL2cTkksp0w__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="120575409"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/120575409/Aquarius"><img alt="Research paper thumbnail of Aquarius" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/120575409/Aquarius">Aquarius</a></div><div class="wp-workCard_item"><span>ACM SIGARCH Computer Architecture News</span><span>, 1987</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="120575409"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="120575409"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 120575409; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=120575409]").text(description); $(".js-view-count[data-work-id=120575409]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 120575409; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='120575409']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=120575409]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":120575409,"title":"Aquarius","internal_url":"https://www.academia.edu/120575409/Aquarius","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="115685867"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/115685867/Programming_languages_for_distributed_applications"><img alt="Research paper thumbnail of Programming languages for distributed applications" class="work-thumbnail" src="https://attachments.academia-assets.com/112096505/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/115685867/Programming_languages_for_distributed_applications">Programming languages for distributed applications</a></div><div class="wp-workCard_item"><span>New Generation Computing</span><span>, Sep 1, 1998</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Much progress has been made in distributed computing in the areas of distribution structure, open...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Much progress has been made in distributed computing in the areas of distribution structure, open computing, fault tolerance, and security. Yet, writing distributed applications remains difficult because the programmer has to manage models of these areas explicitly. A major challenge is to integrate the four models into a coherent development platform. Such a platform should make it possible to cleanly separate an application's functionality from the other four concerns. Concurrent constraint programming, an evolution of concurrent logic programming, has both the expressiveness and the formal foundation needed to attempt this integration. As a first step, we have designed and built a platform that separates an application's functionality from its distribution structure. We have prototyped several collaborative tools with this platform, including a shared graphic editor whose design is presented in detail. The platform efficiently implements Distributed Oz, which extends the Oz language with constructs to express the distribution structure and with basic primitives for open computing, failure detection and handling, and resource control. Oz appears to the programmer as a concurrent object-oriented language with dataflow synchronization. Oz is based on a higher-order, state-aware, concurrent constraint computation model.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="ca4542d1b02cae5d1b758395a624e80b" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":112096505,"asset_id":115685867,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/112096505/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="115685867"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="115685867"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 115685867; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=115685867]").text(description); $(".js-view-count[data-work-id=115685867]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 115685867; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='115685867']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "ca4542d1b02cae5d1b758395a624e80b" } } $('.js-work-strip[data-work-id=115685867]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":115685867,"title":"Programming languages for distributed applications","internal_url":"https://www.academia.edu/115685867/Programming_languages_for_distributed_applications","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":112096505,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/112096505/thumbnails/1.jpg","file_name":"NGC_98.pdf","download_url":"https://www.academia.edu/attachments/112096505/download_file","bulk_download_file_name":"Programming_languages_for_distributed_ap.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/112096505/NGC_98-libre.pdf?1709583020=\u0026response-content-disposition=attachment%3B+filename%3DProgramming_languages_for_distributed_ap.pdf\u0026Expires=1740485735\u0026Signature=JEq4XFTxYaaXefPxpZhk4Al9wl~x8yQAuKGZOF02ssDRVjPSP1R~hKU4oE~JujZJvPBHQFqLCgz6Gp~UXgf0OyGL0N81pSL4ypoIaMSnjb4XaNRrfcYJ6t5HdjG~SiVL-i5n5kzYstE1shVT58txhsKJCjzzzi8OFPClX9DIuDUb~sptSjQ3R~FNw2fv9bGWAoJhlTF15iIm6s2OeB~PGkdGslc4VkSeGa-k6ToXh2-Nk~Eq9Gr40KbP40cjRk8qyOd6hzEQdTDS0PGAN1Ap7A1PCUEXIO4Ilua3HfFrg90otV~YrFFerkvUQZUjeXioD~VnpkWdqjyyrFg1NYOoJg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="114734849"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/114734849/Self_Management_for_Large_Scale_Distributed_Systems"><img alt="Research paper thumbnail of Self Management for Large-Scale Distributed Systems" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/114734849/Self_Management_for_Large_Scale_Distributed_Systems">Self Management for Large-Scale Distributed Systems</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Abstract. As Internet applications become larger and more complex, the task of managing them beco...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Abstract. As Internet applications become larger and more complex, the task of managing them becomes overwhelming. Abnormal events such as software updates, failures, attacks, and hotspots become frequent. The SELFMAN project is tackling this problem by combining two tech- ...</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="114734849"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="114734849"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 114734849; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=114734849]").text(description); $(".js-view-count[data-work-id=114734849]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 114734849; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='114734849']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=114734849]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":114734849,"title":"Self Management for Large-Scale Distributed Systems","internal_url":"https://www.academia.edu/114734849/Self_Management_for_Large_Scale_Distributed_Systems","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="113826545"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/113826545/Attach_me_detach_me_assemble_me_like_you_work_Detachable_user_interface_"><img alt="Research paper thumbnail of Attach me, detach me, assemble me like you work [Detachable user interface]" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/113826545/Attach_me_detach_me_assemble_me_like_you_work_Detachable_user_interface_">Attach me, detach me, assemble me like you work [Detachable user interface]</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Detachable user interfaces consist of graphical user interfaces whose parts or whole can be detac...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Detachable user interfaces consist of graphical user interfaces whose parts or whole can be detached at run-time from their host, migrated onto another computing platform while carrying out the task, possibly adapted to the new platform and attached to the target platform in a peer-to-peer fashion. Detaching is the property of splitting a part of a UI for transferring it onto another platform. Attaching is the reciprocal property: a part of an existing interface can be attached to the currently being used interface so as to recompose another one on-demand, according to user&#39;s needs, task requirements. Assembling interface parts by detaching and attaching allows dynamically composing, decomposing and re-composing new interfaces on demand. To support this interaction paradigm, a development infrastructure has been developed based on a series of primitives such as display, undisplay, copy, expose, return, transfer, delegate, and switch. We exemplify it with QTkDraw, a painting application with attaching and detaching based on the development infrastructure.Anglai</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="113826545"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="113826545"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 113826545; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=113826545]").text(description); $(".js-view-count[data-work-id=113826545]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 113826545; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='113826545']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=113826545]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":113826545,"title":"Attach me, detach me, assemble me like you work [Detachable user interface]","internal_url":"https://www.academia.edu/113826545/Attach_me_detach_me_assemble_me_like_you_work_Detachable_user_interface_","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="113342453"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/113342453/Migratable_User_Interface_Beyond_Migratory_Interfaces"><img alt="Research paper thumbnail of Migratable User Interface: Beyond Migratory Interfaces" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/113342453/Migratable_User_Interface_Beyond_Migratory_Interfaces">Migratable User Interface: Beyond Migratory Interfaces</a></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="113342453"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="113342453"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 113342453; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=113342453]").text(description); $(".js-view-count[data-work-id=113342453]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 113342453; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='113342453']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=113342453]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":113342453,"title":"Migratable User Interface: Beyond Migratory Interfaces","internal_url":"https://www.academia.edu/113342453/Migratable_User_Interface_Beyond_Migratory_Interfaces","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="112127422"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/112127422/A_history_of_the_Oz_multiparadigm_language"><img alt="Research paper thumbnail of A history of the Oz multiparadigm language" class="work-thumbnail" src="https://attachments.academia-assets.com/109453620/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/112127422/A_history_of_the_Oz_multiparadigm_language">A history of the Oz multiparadigm language</a></div><div class="wp-workCard_item"><span>Proceedings of the ACM on Programming Languages</span><span>, 2020</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Oz is a programming language designed to support multiple programming paradigms in a clean factor...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Oz is a programming language designed to support multiple programming paradigms in a clean factored way that is easy to program despite its broad coverage. It started in 1991 as a collaborative effort by the DFKI (Germany) and SICS (Sweden) and led to an influential system, Mozart, that was released in 1999 and widely used in the 2000s for practical applications and education. We give the history of Oz as it developed from its origins in logic programming, starting with Prolog, followed by concurrent logic programming and constraint logic programming, and leading to its two direct precursors, the concurrent constraint model and the Andorra Kernel Language (AKL). We give the lessons learned from the Oz effort including successes and failures and we explain the principles underlying the Oz design. Oz is defined through a kernel language, which is a formal model similar to a foundational calculus, but that is designed to be directly useful to the programmer. The kernel language is orga...</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="9acc0ea41624497e167e95b626da2aae" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":109453620,"asset_id":112127422,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/109453620/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="112127422"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="112127422"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 112127422; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=112127422]").text(description); $(".js-view-count[data-work-id=112127422]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 112127422; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='112127422']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "9acc0ea41624497e167e95b626da2aae" } } $('.js-work-strip[data-work-id=112127422]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":112127422,"title":"A history of the Oz multiparadigm language","internal_url":"https://www.academia.edu/112127422/A_history_of_the_Oz_multiparadigm_language","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":109453620,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/109453620/thumbnails/1.jpg","file_name":"3386333.pdf","download_url":"https://www.academia.edu/attachments/109453620/download_file","bulk_download_file_name":"A_history_of_the_Oz_multiparadigm_langua.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/109453620/3386333-libre.pdf?1703329118=\u0026response-content-disposition=attachment%3B+filename%3DA_history_of_the_Oz_multiparadigm_langua.pdf\u0026Expires=1740485735\u0026Signature=QZp6enehpMTkv-TVNUXesNyRvCaAr8d6g04e0NBIqr0pkTaz6P38VnX4GvlGGIIMSH6gzl2mqFamyr2flvpHIznNvXZ6v75ytwpFPw0DL0yaEXBYrsK1Ky3Arrj-XvgS~8b6afaApupGgdiEdu6exe0VYMtB0YL8ScarU-SPV4zWhZqh4HFf~4c2yEED6LzTPcVnaJTsGG31zrtatwP~RhFV-mgk7SiX5odorZLaj5IF0bGV01FBewH0Nl4m6BiEBqhnvki-jThd2bh-81wxjCRCc~~XAD5GOzO-P5KVxIZPbRf2twjwCzWdSDUy6VZqKsau57u4kqXWYknGHfq6FA__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"},{"id":109453621,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/109453621/thumbnails/1.jpg","file_name":"3386333.pdf","download_url":"https://www.academia.edu/attachments/109453621/download_file","bulk_download_file_name":"A_history_of_the_Oz_multiparadigm_langua.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/109453621/3386333-libre.pdf?1703329111=\u0026response-content-disposition=attachment%3B+filename%3DA_history_of_the_Oz_multiparadigm_langua.pdf\u0026Expires=1740485735\u0026Signature=JtXLtaHk1s3fTfLuHwDiE-gnjXqk~WNTu6FrlM3mQ29D0TSsoUKCJ43YKoXnDmwIMU3S8jwC02dTe6zMxayXz0pXZwL38xBM1P0cHiQeyBm~F35gDMZDli9ZLK6W0~Ntapn5~fJQn~~e00~sbag88AkEIzKF4-MIF46twNRThjvlXTI80f6V4KVviF~bBkuW3Lgr3Hh5z-6dRi2lZmdXLVPpuTPNbqaZ8NZnNq90SRPuj-7T4NTcQ5tgz6RHZGGMn4NhZUy3Ec~c9~TJapaAHwJb0~qa49mD7leHrQvxjUlqE~k0XbPJSa3If8AjVZcR73HYteHTigRWh6u16OsBuA__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738467"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738467/Lasp"><img alt="Research paper thumbnail of Lasp" class="work-thumbnail" src="https://attachments.academia-assets.com/107045074/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738467/Lasp">Lasp</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">We propose Lasp, a new programming model designed to simplify large-scale distributed programming...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">We propose Lasp, a new programming model designed to simplify large-scale distributed programming. Lasp combines ideas from deterministic dataflow programming together with conflictfree replicated data types (CRDTs). This provides support for computations where not all participants are online together at a given moment. The initial design presented here provides powerful primitives for composing CRDTs, which lets us write long-lived faulttolerant distributed applications with nonmonotonic behavior in a monotonic framework. Given reasonable models of node-to-node communications and node failures, we prove formally that a Lasp program can be considered as a functional program that supports functional reasoning and programming techniques. We have implemented Lasp as an Erlang library built on top of the Riak Core distributed systems framework. We have developed one nontrivial large-scale application, the advertisement counter scenario from the SyncFree research project. We plan to extend our current prototype into a general-purpose language in which synchronization is used as little as possible.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="6aef58a07cae086aa7e80c3c4e8ff941" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045074,"asset_id":108738467,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045074/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738467"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738467"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738467; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738467]").text(description); $(".js-view-count[data-work-id=108738467]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738467; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738467']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "6aef58a07cae086aa7e80c3c4e8ff941" } } $('.js-work-strip[data-work-id=108738467]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738467,"title":"Lasp","internal_url":"https://www.academia.edu/108738467/Lasp","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045074,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045074/thumbnails/1.jpg","file_name":"ppdp-2015-preprint.pdf","download_url":"https://www.academia.edu/attachments/107045074/download_file","bulk_download_file_name":"Lasp.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045074/ppdp-2015-preprint-libre.pdf?1698694868=\u0026response-content-disposition=attachment%3B+filename%3DLasp.pdf\u0026Expires=1740485735\u0026Signature=Pf45MSGQNxPwyyckJpKoOzmAluoxdmCBeiZrdd7Xfx4WLIAa7DQV5M8OfxevLjRaJnen-5gCR1R0ODnGiJT-KtJ6ebyfdkBOivHIfxmxmuxLrSLmWhUkPFK~ppsiwYNqW~b19WCiVtte0KiurglOJ28kN0G-4-mmjdh72txvx6gjqTxTWXwCxXFb6yCS2MKYatDsh7Qgg7d3TfPht55oCZIQ1pow9L6H1SD5eTNP3Vqlf-J8LYOAaceh-THBY6YJWTYIxuv6Oa8ePtk~iFKHHB5l50Z7OKJEn2pA-z3c89sbVItvlfGKnHE28ttfuzFKhPx2TA2GCCS5BfnCuI87xg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738465"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738465/A_Relaxed_Ring_for_Self_Organising_and_Fault_Tolerant_Peer_to_Peer_Networks"><img alt="Research paper thumbnail of A Relaxed-Ring for Self-Organising and Fault-Tolerant Peer-to-Peer Networks" class="work-thumbnail" src="https://attachments.academia-assets.com/107045028/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738465/A_Relaxed_Ring_for_Self_Organising_and_Fault_Tolerant_Peer_to_Peer_Networks">A Relaxed-Ring for Self-Organising and Fault-Tolerant Peer-to-Peer Networks</a></div><div class="wp-workCard_item"><span>Proceedings</span><span>, Nov 1, 2007</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">There is no doubt about the increase in popularity of decentralised systems over the classical cl...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">There is no doubt about the increase in popularity of decentralised systems over the classical client-server architecture in distributed applications. These systems are developed mainly as peer-to-peer networks where it is possible to observe many strategies to organise the peers. The most popular one for structured networks is the ring topology. Despite many advantages offered by this topology, the maintenance of the ring is very costly, being difficult to guarantee lookup consistency and fault-tolerance all the time. By increasing self-management in the system we are able to deal with these issues. We model ring maintenance as a selforganising and self-healing system using feedback loops. As a result, we introduce a novel relaxed-ring topology that is able to provide fault-tolerance with realistic assumptions concerning failure detection. Limitations related to failure handling are clearly identified, providing strong guarantees to develop applications on top of the relaxed-ring architecture. Besides permanent failures, the paper analyses temporary failures and broken links, which are often ignored.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="0884323e7b02a2e63b3d52c0fe9592ed" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045028,"asset_id":108738465,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045028/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738465"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738465"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738465; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738465]").text(description); $(".js-view-count[data-work-id=108738465]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738465; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738465']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "0884323e7b02a2e63b3d52c0fe9592ed" } } $('.js-work-strip[data-work-id=108738465]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738465,"title":"A Relaxed-Ring for Self-Organising and Fault-Tolerant Peer-to-Peer Networks","internal_url":"https://www.academia.edu/108738465/A_Relaxed_Ring_for_Self_Organising_and_Fault_Tolerant_Peer_to_Peer_Networks","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045028,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045028/thumbnails/1.jpg","file_name":"selfman-ring.pdf","download_url":"https://www.academia.edu/attachments/107045028/download_file","bulk_download_file_name":"A_Relaxed_Ring_for_Self_Organising_and_F.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045028/selfman-ring-libre.pdf?1698694871=\u0026response-content-disposition=attachment%3B+filename%3DA_Relaxed_Ring_for_Self_Organising_and_F.pdf\u0026Expires=1740457939\u0026Signature=E10yd52JDl4Eb052fGzYBCxO~fSSmk46JTmOqewJYaGl~5DS~35MWzNgTbUeX4UZg2-~ezJDGloWD5EkuO25MPFFQPegkBSX2THcFEfeIUQwjxxn4k67c5rKT8AKCbPSJsDWHS1mA-MrAdH0Px0Na884KmJs0MsvkYbOwX9pyzqgVzSDOxO8ZJwAfYCvneqyn6X0UrrpwPPGGZ8hipSEiCHpcRT2GStY8PAx17Xu~Ypg2nh-bch3NE~cakRrK~FU9Sycqt2PHuh8xfK1UjC-XVKKpMeEUK59u4igwWhFxuFcPC64mgs-LlJgNmLsOc1KjaZHKjDv9W0QryhBSX8Wdg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"},{"id":107045027,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045027/thumbnails/1.jpg","file_name":"selfman-ring.pdf","download_url":"https://www.academia.edu/attachments/107045027/download_file","bulk_download_file_name":"A_Relaxed_Ring_for_Self_Organising_and_F.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045027/selfman-ring-libre.pdf?1698694869=\u0026response-content-disposition=attachment%3B+filename%3DA_Relaxed_Ring_for_Self_Organising_and_F.pdf\u0026Expires=1740457939\u0026Signature=K6~p2wq1TOZ3GSkL~NshPG8RZQyIO-gz0G5oaV-63osxedfUJkkCSjgk9SkTc87Y4z4en97F5zUZbnP2FOoOe~libms7XTWs8qFzCb0mVzdwzSwUmhEFbOtOTP6dw~2DyskgvU7RHJiy0QJtzVsYk9lBXkMF9It90r0MMsFLW082hz987~u~DaQYL8OpUhipKdjwnKfRVoyrdatk6Nin5cWPm-MS~Jiz1RciEc4RxybxKDxhb64osaAn~UOJgVbST8YEwnNI3vUjNvJMLKP~gl4JuypJ2v3mgcc2xhKnr35X2z4bQeKnnVDgeiKCkqvD~jhtrD2dgVScoxkEdmwMZQ__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738464"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738464/Selective_Hearing_An_Approach_to_Distributed_Eventually_Consistent_Edge_Computation"><img alt="Research paper thumbnail of Selective Hearing: An Approach to Distributed, Eventually Consistent Edge Computation" class="work-thumbnail" src="https://attachments.academia-assets.com/107045075/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738464/Selective_Hearing_An_Approach_to_Distributed_Eventually_Consistent_Edge_Computation">Selective Hearing: An Approach to Distributed, Eventually Consistent Edge Computation</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">We present a new programming model for largescale mobile and "Internet of Things" style distribut...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">We present a new programming model for largescale mobile and "Internet of Things" style distributed applications. The model consists of two layers: a language layer based on the Lasp language with a runtime layer based on epidemic broadcast. The Lasp layer provides deterministic coordinationfree computation primitives based on conflict-free replicated data types (CRDTs). The epidemic broadcast layer is based on the Plumtree protocol. It provides a communication framework where clients may only have a partial view of membership and may not want to participate in or have knowledge of all active computations. We motivate the new model with a nontrivial mobile application, a distributed ad counter, and we give the model's formal semantics.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="62c9e4f3eee7aaa95751547ef62b63b9" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045075,"asset_id":108738464,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045075/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738464"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738464"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738464; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738464]").text(description); $(".js-view-count[data-work-id=108738464]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738464; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738464']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "62c9e4f3eee7aaa95751547ef62b63b9" } } $('.js-work-strip[data-work-id=108738464]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738464,"title":"Selective Hearing: An Approach to Distributed, Eventually Consistent Edge Computation","internal_url":"https://www.academia.edu/108738464/Selective_Hearing_An_Approach_to_Distributed_Eventually_Consistent_Edge_Computation","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045075,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045075/thumbnails/1.jpg","file_name":"wpsds-2015-preprint.pdf","download_url":"https://www.academia.edu/attachments/107045075/download_file","bulk_download_file_name":"Selective_Hearing_An_Approach_to_Distrib.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045075/wpsds-2015-preprint-libre.pdf?1698694874=\u0026response-content-disposition=attachment%3B+filename%3DSelective_Hearing_An_Approach_to_Distrib.pdf\u0026Expires=1740485735\u0026Signature=WmTVmHxNhSyQwrAVSaFWW7XatJFy3-5jtjOD1uQXRlOIe7sAQHNyA7KjiHMcf6QoQTWvSbO5xNpdglZnIkDD7K5LNGQArkvVTrLWhOEPm1PGeiqDeQYsQi1sROu4lkihlIMSnfq86ZAXAhuBG1XYCSG2EzQXgUJd3NFIuuWQQA7D8sEx1o3eVufaRdTROiVxn76pqs6uLaZ7~gbB3Ayblwizz6pWArIGRYAu5D2T3w9k~BTsMtyru8tnIFok4wQL~1Yz8ndyYv3NGtiavDS0CGYKOHAw1NGJQoZtvcsJdzGG~pzkTSyas-ILRYLZnaH7dzr7-Z79hZIzxnwqVjwPDA__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738463"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/108738463/Integrating_Records_into_Concurrent_Constraint_Programming_A_Case_Study_for_DFKI_Oz_Abstract_"><img alt="Research paper thumbnail of Integrating Records into Concurrent Constraint Programming: A Case Study for DFKI Oz (Abstract)" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/108738463/Integrating_Records_into_Concurrent_Constraint_Programming_A_Case_Study_for_DFKI_Oz_Abstract_">Integrating Records into Concurrent Constraint Programming: A Case Study for DFKI Oz (Abstract)</a></div><div class="wp-workCard_item"><span>WLP</span><span>, 1995</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738463"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738463"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738463; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738463]").text(description); $(".js-view-count[data-work-id=108738463]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738463; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738463']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=108738463]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738463,"title":"Integrating Records into Concurrent Constraint Programming: A Case Study for DFKI Oz (Abstract)","internal_url":"https://www.academia.edu/108738463/Integrating_Records_into_Concurrent_Constraint_Programming_A_Case_Study_for_DFKI_Oz_Abstract_","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738462"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738462/The_implementation_and_use_of_a_generic_dataflow_behaviour_in_Erlang"><img alt="Research paper thumbnail of The implementation and use of a generic dataflow behaviour in Erlang" class="work-thumbnail" src="https://attachments.academia-assets.com/107045072/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738462/The_implementation_and_use_of_a_generic_dataflow_behaviour_in_Erlang">The implementation and use of a generic dataflow behaviour in Erlang</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">We propose a new "generic" abstraction for Erlang/OTP that aids in the implementation of dataflow...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">We propose a new "generic" abstraction for Erlang/OTP that aids in the implementation of dataflow programming languages and models on the Erlang VM. This abstraction simplifies the implementation of "processing elements" in dataflow languages by providing a simple callback interface in the style of the gen server and gen fsm abstractions. We motivate the use of this new abstraction by examining the implementation of a distributed dataflow programming variant called Lasp.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="a9c341139850592092dcb49cd1c6ebf7" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045072,"asset_id":108738462,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045072/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738462"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738462"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738462; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738462]").text(description); $(".js-view-count[data-work-id=108738462]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738462; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738462']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "a9c341139850592092dcb49cd1c6ebf7" } } $('.js-work-strip[data-work-id=108738462]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738462,"title":"The implementation and use of a generic dataflow behaviour in Erlang","internal_url":"https://www.academia.edu/108738462/The_implementation_and_use_of_a_generic_dataflow_behaviour_in_Erlang","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045072,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045072/thumbnails/1.jpg","file_name":"erlang-workshop-2015.pdf","download_url":"https://www.academia.edu/attachments/107045072/download_file","bulk_download_file_name":"The_implementation_and_use_of_a_generic.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045072/erlang-workshop-2015-libre.pdf?1698694866=\u0026response-content-disposition=attachment%3B+filename%3DThe_implementation_and_use_of_a_generic.pdf\u0026Expires=1740485735\u0026Signature=bezCAWeiywfgx4RnWvMRwUqgImCYsNHqTT-eP3uYAvkFKyJVXa8vcBGe0X-Fune9u3hcDj6dIAgQCE6PLFNJqHMfO-rNcOIoT3lxYcKszPCmJgsGIcx4x2yxUwCvkbw0mePthV90-Ikqq4YinZNaP149o5JvEnjQzEh4wq2s9Uslqrphgdc5fI1jJbwAxUmUEatgq6wM2eiqqyy4YjUMmsujExGh37kX0DEkXrbHtSKOfJ-p7UBkW2xDR5vlG6QoeQfFadEh~Z2hTuY9V9TrMgu9h4xWFtTNU3rQ0JaJxbiqs-Y5JKEE38vQ5G0E0D1-9-9VlH6Q1kL96M~dvPUuHw__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738461"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/108738461/LightKone_Towards_General_Purpose_Computations_on_the_Edge"><img alt="Research paper thumbnail of LightKone: Towards General Purpose Computations on the Edge" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/108738461/LightKone_Towards_General_Purpose_Computations_on_the_Edge">LightKone: Towards General Purpose Computations on the Edge</a></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738461"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738461"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738461; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738461]").text(description); $(".js-view-count[data-work-id=108738461]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738461; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738461']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=108738461]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738461,"title":"LightKone: Towards General Purpose Computations on the Edge","internal_url":"https://www.academia.edu/108738461/LightKone_Towards_General_Purpose_Computations_on_the_Edge","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738460"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738460/Exploiting_speculation_in_partially_replicated_transactional_data_stores"><img alt="Research paper thumbnail of Exploiting speculation in partially replicated transactional data stores" class="work-thumbnail" src="https://attachments.academia-assets.com/107045070/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738460/Exploiting_speculation_in_partially_replicated_transactional_data_stores">Exploiting speculation in partially replicated transactional data stores</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Information systems → Distributed database transactions; Storage replication; Online services are...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Information systems → Distributed database transactions; Storage replication; Online services are often deployed over geographically-scattered data centers (geo-replication), which allows services to be highly available and reduces access latency. On the down side, to provide ACID transactions, global certification (i.e., across data centers) is needed to detect conflicts between concurrent transactions executing at different data centers. The global certification phase reduces throughput because transactions need to hold pre-commit locks, and it increases client-perceived latency because global certification lies in the critical path of transaction execution.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="860995c6a5e1ac70fbe301d129a2b85b" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045070,"asset_id":108738460,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045070/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738460"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738460"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738460; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738460]").text(description); $(".js-view-count[data-work-id=108738460]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738460; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738460']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "860995c6a5e1ac70fbe301d129a2b85b" } } $('.js-work-strip[data-work-id=108738460]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738460,"title":"Exploiting speculation in partially replicated transactional data stores","internal_url":"https://www.academia.edu/108738460/Exploiting_speculation_in_partially_replicated_transactional_data_stores","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045070,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045070/thumbnails/1.jpg","file_name":"SOCC17.pdf","download_url":"https://www.academia.edu/attachments/107045070/download_file","bulk_download_file_name":"Exploiting_speculation_in_partially_repl.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045070/SOCC17-libre.pdf?1698694861=\u0026response-content-disposition=attachment%3B+filename%3DExploiting_speculation_in_partially_repl.pdf\u0026Expires=1740485735\u0026Signature=LZNU9sZo8WYpgmimCR0xP9UOBB~RUq5XBmAu6CPEPVYOWTU0ngwNljBK9DzDEYh6SfLNTvPq2WxKtUdThdpRKR0ZDY2eaSUWOElttTwSs98u80tQEKjZkJkRORisq07x-~OgWrsWhjfubgdwCb5uN85Gjk2JxoAXynayNdbg6Qjz6jyNT7ClyIw8b7PG0fsjOflQkMG0i~PvxcKQk9mNkXRS4AtA1IwJCtUyXYxcBwbQH-6mGbInIOG0~ErCPFjvN4w-pkHOd~9AO7FofxPJctTlj1xsWbAU2v12m~Zx7z8WQiE-TM0Isvdmes62--uHRs4Qmu43LL9KBEZ8Q0~3yA__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738459"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738459/A_detailed_algorithm_testing_guards_over_feature_trees"><img alt="Research paper thumbnail of A detailed algorithm testing guards over feature trees" class="work-thumbnail" src="https://attachments.academia-assets.com/107045068/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738459/A_detailed_algorithm_testing_guards_over_feature_trees">A detailed algorithm testing guards over feature trees</a></div><div class="wp-workCard_item"><span>Lecture Notes in Computer Science</span><span>, 1995</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="666f70c2410c8a3ca8f60084c11abe93" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045068,"asset_id":108738459,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045068/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738459"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738459"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738459; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738459]").text(description); $(".js-view-count[data-work-id=108738459]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738459; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738459']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "666f70c2410c8a3ca8f60084c11abe93" } } $('.js-work-strip[data-work-id=108738459]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738459,"title":"A detailed algorithm testing guards over feature trees","internal_url":"https://www.academia.edu/108738459/A_detailed_algorithm_testing_guards_over_feature_trees","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045068,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045068/thumbnails/1.jpg","file_name":"9783540594796.pdf","download_url":"https://www.academia.edu/attachments/107045068/download_file","bulk_download_file_name":"A_detailed_algorithm_testing_guards_over.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045068/9783540594796-libre.pdf?1698694860=\u0026response-content-disposition=attachment%3B+filename%3DA_detailed_algorithm_testing_guards_over.pdf\u0026Expires=1740457939\u0026Signature=B8Y~MGIHeWi8~L5fyhkAgBavNI5vVVoCxxJVoDSvax-5f4IV0Q4ghFrL10FQvp77w-~XwWrji7lAOstMtEfO90wavqMmdAefEmEbluss6ahSgr~vd3HjWqNhwzhBWjH6r-L36X3UZ1QpT9JOJAwsSQ5sgB6kHgTG3Hc6xwSE2KdcA~AsxfAExfpBPLaALRtrQoA1B0jOf9OVJ9oCeaEGe6EUTu6IjgqcPwAsW5Xxckhu6wZgCqkdRRNTEp47PwJwBh-h2OalUdkRDsG0RAmGNHtdXR70deL0ux7MgSq8uGa8owsvGJzDLSGZxK4Oy64XKOi~G7yjjjWUI00NoC~tzw__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738457"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738457/Mind_Your_Outcomes_The_Q_approach_to_Quality_Centric_Systems_Development_and_Its_Application_to_a_Blockchain_Case_Study"><img alt="Research paper thumbnail of Mind Your Outcomes: The ∆Q approach to Quality-Centric Systems Development and Its Application to a Blockchain Case-Study" class="work-thumbnail" src="https://attachments.academia-assets.com/107045063/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738457/Mind_Your_Outcomes_The_Q_approach_to_Quality_Centric_Systems_Development_and_Its_Application_to_a_Blockchain_Case_Study">Mind Your Outcomes: The ∆Q approach to Quality-Centric Systems Development and Its Application to a Blockchain Case-Study</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">† This paper is an extended version of our paper published in 33 rd Symposium on Implementation a...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">† This paper is an extended version of our paper published in 33 rd Symposium on Implementation and Application of Functional Languages (IFL21), as a draft.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="43087673c54d9010aad4ddede3531ade" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045063,"asset_id":108738457,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045063/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738457"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738457"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738457; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738457]").text(description); $(".js-view-count[data-work-id=108738457]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738457; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738457']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "43087673c54d9010aad4ddede3531ade" } } $('.js-work-strip[data-work-id=108738457]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738457,"title":"Mind Your Outcomes: The ∆Q approach to Quality-Centric Systems Development and Its Application to a Blockchain Case-Study","internal_url":"https://www.academia.edu/108738457/Mind_Your_Outcomes_The_Q_approach_to_Quality_Centric_Systems_Development_and_Its_Application_to_a_Blockchain_Case_Study","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045063,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045063/thumbnails/1.jpg","file_name":"download.pdf","download_url":"https://www.academia.edu/attachments/107045063/download_file","bulk_download_file_name":"Mind_Your_Outcomes_The_Q_approach_to_Qua.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045063/download-libre.pdf?1698694906=\u0026response-content-disposition=attachment%3B+filename%3DMind_Your_Outcomes_The_Q_approach_to_Qua.pdf\u0026Expires=1740485735\u0026Signature=CQ51sAv~uYg~OYNG9A2cpRbi1sNRcyiIGFi6RikZXtCrPJcuQWNa~Mm4kAAoDp-sWodhzDkApGaAPt~cF3bhmsSQDAOc5RcFMxiiLxuXzPWYFvK07mmepsp8-6IBXEhQmXfZjjkc8bFLpOJ9iap5naFxai-KyWc8dB6HICYuGwG4mbHe~4pXzA3t1PSWE0fzrsDZYfRd0j37CKKHDHoN-L7ODpOrn7DodiSL5YZNBl~A1m6Kd3rLTmltvz-HMKDdjLomTi05CIt0bFobMJYZ~CFrvrJUAOpGXnYh4Qe0T3U7yg4lCk2ihbmYbfrb96l2o3i3kSfJEt5gon6CyGUTmQ__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738456"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738456/Transparent_speculation_in_geo_replicated_transactional_data_stores"><img alt="Research paper thumbnail of Transparent speculation in geo-replicated transactional data stores" class="work-thumbnail" src="https://attachments.academia-assets.com/107045069/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738456/Transparent_speculation_in_geo_replicated_transactional_data_stores">Transparent speculation in geo-replicated transactional data stores</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">This work presents Speculative Transaction Replication (STR), a protocol that exploits transparen...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">This work presents Speculative Transaction Replication (STR), a protocol that exploits transparent speculation techniques to enhance performance of geo-distributed, partially replicated transactional data stores. In addition, we define a new consistency model, Speculative Snapshot Isolation (SPSI), that extends the semantics of Snapshot Isolation (SI) to shelter applications from the subtle anomalies that can arise from using speculative transaction processing. SPSI extends SI in an intuitive and rigorous fashion by specifying desirable atomicity and isolation guarantees that must hold when using speculative execution. STR provides a form of speculation that is fully transparent for programmers (it does not expose the effects of misspeculations to clients). Since the speculation techniques employed by STR satisfy SPSI, they can be leveraged by application programs in a transparent way, without requiring any source-code modification to applications designed to operate using SI. STR combines two key techniques: speculative reads, which allow transactions to observe pre-committed versions, which can reduce the 'effective duration' of pre-commit locks and enhance throughput; Precise Clocks, a novel timestamping mechanism that uses per-item timestamps with physical clocks, which together greatly enhance the probability of successful speculation. We assess STR's performance on up to nine geo-distributed Amazon EC2 data centers, using both synthetic benchmarks as well as realistic benchmarks (TPC-C and RUBiS). Our evaluation shows that STR achieves throughput gains up to 11× and latency reduction up to 10×, in workloads characterized by low inter-data center contention. Furthermore, thanks to a self-tuning mechanism that dynamically and transparently enables and disables speculation, STR offers robust performance even when faced with unfavourable workloads that suffer from high misspeculation rates.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="cf66ebe241759337dc1682a2d1814e5e" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045069,"asset_id":108738456,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045069/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738456"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738456"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738456; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738456]").text(description); $(".js-view-count[data-work-id=108738456]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738456; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738456']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "cf66ebe241759337dc1682a2d1814e5e" } } $('.js-work-strip[data-work-id=108738456]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738456,"title":"Transparent speculation in geo-replicated transactional data stores","internal_url":"https://www.academia.edu/108738456/Transparent_speculation_in_geo_replicated_transactional_data_stores","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045069,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045069/thumbnails/1.jpg","file_name":"str_hpdc_cr_final.pdf","download_url":"https://www.academia.edu/attachments/107045069/download_file","bulk_download_file_name":"Transparent_speculation_in_geo_replicate.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045069/str_hpdc_cr_final-libre.pdf?1698694885=\u0026response-content-disposition=attachment%3B+filename%3DTransparent_speculation_in_geo_replicate.pdf\u0026Expires=1740457939\u0026Signature=H5b4Q0Q4J9Dz053C2yL3qlYsi6OUIxFu5J7GR1PsUrxLv3A8jbGLTma4ACIS5wm8TBXkMLxVQMyMVOtTyNzmazQhfNZeLFrjQaW67g~0IxpgrF~rM7OEEV5EFK2smLMyTCUnORJgQ6mpaNSmGgtsN0GZJDNwBYsaKapIcWunDnza6B59tGq2bKfClxcMIiY90d55EE7FLxtyR2n4-Gth-chP0e0UYfLrptZUcPTmNrutCu1TuOH4bjzaWqqEEeEwLeeySXJN3HOU7dz2nBhrAKtxUrUF8h1ql3Uq0v3d6YgSYx6sUz-6OUnMg25uKPoOHmVQPWj~-QknZz5Lcn2tMg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> </div><div class="profile--tab_content_container js-tab-pane tab-pane" data-section-id="15641992" id="papers"><div class="js-work-strip profile--work_container" data-work-id="125984100"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/125984100/Teaching_Programming_Broadly_and_Deeply_The_Kernel_Language_Approach"><img alt="Research paper thumbnail of Teaching Programming Broadly and Deeply: The Kernel Language Approach" class="work-thumbnail" src="https://attachments.academia-assets.com/119931348/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/125984100/Teaching_Programming_Broadly_and_Deeply_The_Kernel_Language_Approach">Teaching Programming Broadly and Deeply: The Kernel Language Approach</a></div><div class="wp-workCard_item"><span>Springer eBooks</span><span>, 2003</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">We present the kernel language approach; a new way to teach programming that situates most of the...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">We present the kernel language approach; a new way to teach programming that situates most of the widely known programming paradigms (including imperative, object-oriented, concurrent, logic, and functional) into a uniform setting that shows their deep relationships and how to use them together. Widely different practical languages (exemplified by Java, Haskell, Prolog, and Erlang) with their rich panoplies of abstractions and syntax are explained by straightforward translations into closely related kernel languages, simple languages that consist of small numbers of programmer-significant concepts. Kernel languages are easy to understand and have a simple formal semantics that can be used by practicing programmers to reason about correctness and complexity.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="5926fcb39d2fb3463848e390bb635b72" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":119931348,"asset_id":125984100,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/119931348/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="125984100"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="125984100"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 125984100; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=125984100]").text(description); $(".js-view-count[data-work-id=125984100]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 125984100; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='125984100']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "5926fcb39d2fb3463848e390bb635b72" } } $('.js-work-strip[data-work-id=125984100]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":125984100,"title":"Teaching Programming Broadly and Deeply: The Kernel Language Approach","internal_url":"https://www.academia.edu/125984100/Teaching_Programming_Broadly_and_Deeply_The_Kernel_Language_Approach","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":119931348,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/119931348/thumbnails/1.jpg","file_name":"10.1007_2F978-0-387-35619-8_6.pdf","download_url":"https://www.academia.edu/attachments/119931348/download_file","bulk_download_file_name":"Teaching_Programming_Broadly_and_Deeply.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/119931348/10.1007_2F978-0-387-35619-8_6-libre.pdf?1733069887=\u0026response-content-disposition=attachment%3B+filename%3DTeaching_Programming_Broadly_and_Deeply.pdf\u0026Expires=1740485735\u0026Signature=C8jJCHMPpcFd28q-6nlsOIGFdHD0E24XFMUa1YWuP2VlEj90u~gkm4h1YSJL~046kGFlad2H32zZMqRp0nilnTGuVjAwRI5JvkKxXrhS0CYg1EBCOu5CUll-Uo2vQQ9IZnTlJIl9Gdo10sCPCUGUOnUVa8zW~O~SR371bHxRrEWNqOirRwZY1dXGjajN1R9auOuCx04pUOD4SjVBlOc0vI-nreGUu3693R6PX5X5NVQmqMjMbMXCOqwphA-gljDgKrfZ3Azz85uLMDugvFd7ZLoiEExt5xZirIMd~bmq3KscP3uMilO39X~igFKnBWokWnWVRykCiIMx8dmPLHmpeg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"},{"id":119931351,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/119931351/thumbnails/1.jpg","file_name":"10.1007_2F978-0-387-35619-8_6.pdf","download_url":"https://www.academia.edu/attachments/119931351/download_file","bulk_download_file_name":"Teaching_Programming_Broadly_and_Deeply.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/119931351/10.1007_2F978-0-387-35619-8_6-libre.pdf?1733069885=\u0026response-content-disposition=attachment%3B+filename%3DTeaching_Programming_Broadly_and_Deeply.pdf\u0026Expires=1740485735\u0026Signature=Mi4VHI~PdGA8Mp-Kwyplpf8g3ztXvVrgICrIqxYMJyKhgz-ooUTlhVaca30AOaqijFfFkRgmYpa6WfTdrLXKquCM32pEzcL2gXOAPWGl~e4iwBBZf1QUqbixN3oIK6Ct0bw~0ssFedvcFfZMmdqC1FmSBybLkOWcn0KcNaF7X1EVhOtc81Sby4~-zJc7ieS1sNei-6af-2FNK9SXX4FKkZ2kqVHNZqEnRYZh2cg9o6ZhDvqiYYfidLRwgPROktoouR03DnjGdHskSF0oBg4PeVBVY-Esjctxa~-vbrdg54eM0cDW8U8jyeJceHafipTQB1wIq8x9rkC8Lfcyeq0Pbw__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="124172471"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/124172471/Algebraic_Reasoning_About_Timeliness"><img alt="Research paper thumbnail of Algebraic Reasoning About Timeliness" class="work-thumbnail" src="https://attachments.academia-assets.com/118446036/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/124172471/Algebraic_Reasoning_About_Timeliness">Algebraic Reasoning About Timeliness</a></div><div class="wp-workCard_item"><span>Electronic Proceedings in Theoretical Computer Science</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Designing distributed systems to have predictable performance under high load is difficult becaus...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Designing distributed systems to have predictable performance under high load is difficult because of resource exhaustion, non-linearity, and stochastic behaviour. Timeliness, i.e., delivering results within defined time bounds, is a central aspect of predictable performance. In this paper, we focus on timeliness using the ∆Q Systems Development paradigm (∆QSD, developed by PNSol), which computes timeliness by modelling systems observationally using so-called outcome expressions. An outcome expression is a compositional definition of a system's observed behaviour in terms of its basic operations. Given the behaviour of the basic operations, ∆QSD efficiently computes the stochastic behaviour of the whole system including its timeliness. This paper formally proves useful algebraic properties of outcome expressions w.r.t. timeliness. We prove the different algebraic structures the set of outcome expressions form with the different ∆QSD operators and demonstrate why those operators do not form richer structures. We prove or disprove the set of all possible distributivity results on outcome expressions. On our way for disproving 8 of those distributivity results, we develop a technique called properisation, which gives rise to the first body of maths for improper random variables. Finally, we also prove 14 equivalences that have been used in the past in the practice of ∆QSD. An immediate benefit is rewrite rules that can be used for design exploration under established timeliness equivalence. This work is part of an ongoing project to disseminate and build tool support for ∆QSD. The ability to rewrite outcome expressions is essential for efficient tool support. Algebraic Reasoning About Timeliness This paper defines and proves algebraic properties of the ∆QSD operators w.r.t. timeliness, i.e., delivering outcomes within the acceptable time-frames. In this paper, our sole resource of concern is time, although ∆QSD includes other types of resources and their interaction. This theoretical work is part of an ongoing project to disseminate and build tool support for ∆QSD, to make it available to the wide community of system engineers. We base our work on the ∆QSD formalisation given by Haeri et al. [11], which defines outcome expressions and their semantics, and gives a real-world example of ∆QSD taken from the blockchain domain. Contributions This paper gives a firm mathematical foundation for ∆QSD, and uses this to establish important algebraic properties of the ∆QSD operators with respect to timeliness, i.e., when the relevant resource is time. This paper is based on a general model theory of resource analysis for systems specified using outcome expressions [12]. That model theory is the first of its kind and we specialise it using the timeliness analysis recipe that is commonly used in ∆QSD (Definition 3). • We show that the set of outcome expressions forms different algebraic structures with the different ∆QSD operators (Theorems 1-4). • We establish 3 distributivity results in Section 7 about the ∆QSD operators (Theorem 6). • We rule out the formation of certain richer algebraic structures by the set of outcome expressions and the current ∆QSD operators (Remarks 2, 3, and 4).</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="d4813442e62d36724c46dd99915db589" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":118446036,"asset_id":124172471,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/118446036/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="124172471"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="124172471"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 124172471; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=124172471]").text(description); $(".js-view-count[data-work-id=124172471]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 124172471; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='124172471']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "d4813442e62d36724c46dd99915db589" } } $('.js-work-strip[data-work-id=124172471]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":124172471,"title":"Algebraic Reasoning About Timeliness","translated_title":"","metadata":{"publisher":"Open Publishing Association","grobid_abstract":"Designing distributed systems to have predictable performance under high load is difficult because of resource exhaustion, non-linearity, and stochastic behaviour. Timeliness, i.e., delivering results within defined time bounds, is a central aspect of predictable performance. In this paper, we focus on timeliness using the ∆Q Systems Development paradigm (∆QSD, developed by PNSol), which computes timeliness by modelling systems observationally using so-called outcome expressions. An outcome expression is a compositional definition of a system's observed behaviour in terms of its basic operations. Given the behaviour of the basic operations, ∆QSD efficiently computes the stochastic behaviour of the whole system including its timeliness. This paper formally proves useful algebraic properties of outcome expressions w.r.t. timeliness. We prove the different algebraic structures the set of outcome expressions form with the different ∆QSD operators and demonstrate why those operators do not form richer structures. We prove or disprove the set of all possible distributivity results on outcome expressions. On our way for disproving 8 of those distributivity results, we develop a technique called properisation, which gives rise to the first body of maths for improper random variables. Finally, we also prove 14 equivalences that have been used in the past in the practice of ∆QSD. An immediate benefit is rewrite rules that can be used for design exploration under established timeliness equivalence. This work is part of an ongoing project to disseminate and build tool support for ∆QSD. The ability to rewrite outcome expressions is essential for efficient tool support. Algebraic Reasoning About Timeliness This paper defines and proves algebraic properties of the ∆QSD operators w.r.t. timeliness, i.e., delivering outcomes within the acceptable time-frames. In this paper, our sole resource of concern is time, although ∆QSD includes other types of resources and their interaction. This theoretical work is part of an ongoing project to disseminate and build tool support for ∆QSD, to make it available to the wide community of system engineers. We base our work on the ∆QSD formalisation given by Haeri et al. [11], which defines outcome expressions and their semantics, and gives a real-world example of ∆QSD taken from the blockchain domain. Contributions This paper gives a firm mathematical foundation for ∆QSD, and uses this to establish important algebraic properties of the ∆QSD operators with respect to timeliness, i.e., when the relevant resource is time. This paper is based on a general model theory of resource analysis for systems specified using outcome expressions [12]. That model theory is the first of its kind and we specialise it using the timeliness analysis recipe that is commonly used in ∆QSD (Definition 3). • We show that the set of outcome expressions forms different algebraic structures with the different ∆QSD operators (Theorems 1-4). • We establish 3 distributivity results in Section 7 about the ∆QSD operators (Theorem 6). • We rule out the formation of certain richer algebraic structures by the set of outcome expressions and the current ∆QSD operators (Remarks 2, 3, and 4).","publication_name":"Electronic Proceedings in Theoretical Computer Science","grobid_abstract_attachment_id":118446036},"translated_abstract":null,"internal_url":"https://www.academia.edu/124172471/Algebraic_Reasoning_About_Timeliness","translated_internal_url":"","created_at":"2024-09-26T01:27:25.963-07:00","preview_url":null,"current_user_can_edit":null,"current_user_is_owner":null,"owner_id":3547736,"coauthors_can_edit":true,"document_type":"paper","co_author_tags":[],"downloadable_attachments":[{"id":118446036,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/118446036/thumbnails/1.jpg","file_name":"paper.pdf","download_url":"https://www.academia.edu/attachments/118446036/download_file","bulk_download_file_name":"Algebraic_Reasoning_About_Timeliness.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/118446036/paper-libre.pdf?1727343230=\u0026response-content-disposition=attachment%3B+filename%3DAlgebraic_Reasoning_About_Timeliness.pdf\u0026Expires=1738621158\u0026Signature=I4gKqdNegLr7voxCJccTZsg2B4~oslclCzhzxD2Pi19oko-b0GeSbhB~b7IHA9GIsg7lMuM-dGwUR9TQOLQGQjpxKFZEY0iK56u3IhOCQBPm7DQXjd9WVFDN2zK7bxAuFTyKs4bhHlPmAizFBgMGdv-EFA0~2hGkvqgM4B8J19OWyMPUThKIoLTR1ziPP7BO~yLlo-m2ZOv83W7~vwh~UkujIwdCX1k2DWuHRnSqjPpw-kOCb~grrcKqcbU4CLuUNs1Rp5VNWbfRklc0nd3B5QQfA4y~MRPjt9KPYyZVMf32FruW9Woreo3QkZJVaLJ0ZfTu6jGL3YTODCGzkv2TVg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}],"slug":"Algebraic_Reasoning_About_Timeliness","translated_slug":"","page_count":20,"language":"en","content_type":"Work","summary":"Designing distributed systems to have predictable performance under high load is difficult because of resource exhaustion, non-linearity, and stochastic behaviour. Timeliness, i.e., delivering results within defined time bounds, is a central aspect of predictable performance. In this paper, we focus on timeliness using the ∆Q Systems Development paradigm (∆QSD, developed by PNSol), which computes timeliness by modelling systems observationally using so-called outcome expressions. An outcome expression is a compositional definition of a system's observed behaviour in terms of its basic operations. Given the behaviour of the basic operations, ∆QSD efficiently computes the stochastic behaviour of the whole system including its timeliness. This paper formally proves useful algebraic properties of outcome expressions w.r.t. timeliness. We prove the different algebraic structures the set of outcome expressions form with the different ∆QSD operators and demonstrate why those operators do not form richer structures. We prove or disprove the set of all possible distributivity results on outcome expressions. On our way for disproving 8 of those distributivity results, we develop a technique called properisation, which gives rise to the first body of maths for improper random variables. Finally, we also prove 14 equivalences that have been used in the past in the practice of ∆QSD. An immediate benefit is rewrite rules that can be used for design exploration under established timeliness equivalence. This work is part of an ongoing project to disseminate and build tool support for ∆QSD. The ability to rewrite outcome expressions is essential for efficient tool support. Algebraic Reasoning About Timeliness This paper defines and proves algebraic properties of the ∆QSD operators w.r.t. timeliness, i.e., delivering outcomes within the acceptable time-frames. In this paper, our sole resource of concern is time, although ∆QSD includes other types of resources and their interaction. This theoretical work is part of an ongoing project to disseminate and build tool support for ∆QSD, to make it available to the wide community of system engineers. We base our work on the ∆QSD formalisation given by Haeri et al. [11], which defines outcome expressions and their semantics, and gives a real-world example of ∆QSD taken from the blockchain domain. Contributions This paper gives a firm mathematical foundation for ∆QSD, and uses this to establish important algebraic properties of the ∆QSD operators with respect to timeliness, i.e., when the relevant resource is time. This paper is based on a general model theory of resource analysis for systems specified using outcome expressions [12]. That model theory is the first of its kind and we specialise it using the timeliness analysis recipe that is commonly used in ∆QSD (Definition 3). • We show that the set of outcome expressions forms different algebraic structures with the different ∆QSD operators (Theorems 1-4). • We establish 3 distributivity results in Section 7 about the ∆QSD operators (Theorem 6). • We rule out the formation of certain richer algebraic structures by the set of outcome expressions and the current ∆QSD operators (Remarks 2, 3, and 4).","owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":118446036,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/118446036/thumbnails/1.jpg","file_name":"paper.pdf","download_url":"https://www.academia.edu/attachments/118446036/download_file","bulk_download_file_name":"Algebraic_Reasoning_About_Timeliness.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/118446036/paper-libre.pdf?1727343230=\u0026response-content-disposition=attachment%3B+filename%3DAlgebraic_Reasoning_About_Timeliness.pdf\u0026Expires=1738621158\u0026Signature=I4gKqdNegLr7voxCJccTZsg2B4~oslclCzhzxD2Pi19oko-b0GeSbhB~b7IHA9GIsg7lMuM-dGwUR9TQOLQGQjpxKFZEY0iK56u3IhOCQBPm7DQXjd9WVFDN2zK7bxAuFTyKs4bhHlPmAizFBgMGdv-EFA0~2hGkvqgM4B8J19OWyMPUThKIoLTR1ziPP7BO~yLlo-m2ZOv83W7~vwh~UkujIwdCX1k2DWuHRnSqjPpw-kOCb~grrcKqcbU4CLuUNs1Rp5VNWbfRklc0nd3B5QQfA4y~MRPjt9KPYyZVMf32FruW9Woreo3QkZJVaLJ0ZfTu6jGL3YTODCGzkv2TVg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}],"research_interests":[{"id":300,"name":"Mathematics","url":"https://www.academia.edu/Documents/in/Mathematics"},{"id":303,"name":"Algebraic Number Theory","url":"https://www.academia.edu/Documents/in/Algebraic_Number_Theory"},{"id":422,"name":"Computer Science","url":"https://www.academia.edu/Documents/in/Computer_Science"},{"id":749,"name":"Mathematical Economics","url":"https://www.academia.edu/Documents/in/Mathematical_Economics"},{"id":17100,"name":"Theoretical Computer Science","url":"https://www.academia.edu/Documents/in/Theoretical_Computer_Science"},{"id":19997,"name":"Pure Mathematics","url":"https://www.academia.edu/Documents/in/Pure_Mathematics"},{"id":37345,"name":"Discrete Mathematics","url":"https://www.academia.edu/Documents/in/Discrete_Mathematics"},{"id":86034,"name":"Mathematical Analysis","url":"https://www.academia.edu/Documents/in/Mathematical_Analysis"},{"id":1489478,"name":"Programming language","url":"https://www.academia.edu/Documents/in/Programming_language"}],"urls":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="121216550"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/121216550/The_Mozart_constraint_subsystem_system_presentation"><img alt="Research paper thumbnail of The Mozart constraint subsystem: system presentation" class="work-thumbnail" src="https://attachments.academia-assets.com/116154719/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/121216550/The_Mozart_constraint_subsystem_system_presentation">The Mozart constraint subsystem: system presentation</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">We present the current state of a new implementation of the constraint engine for the Mozart prog...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">We present the current state of a new implementation of the constraint engine for the Mozart programming system. Our implementation integrates the Gecode constraint library into the core of Mozart version 2.0. Doing so, we allow users to take advantage of the efficiency of Gecode propagators transparently by maintaining the existing language constraints abstractions. Future Mozart systems can thus benefit from the rapid pace of constraint solving optimizations that are included in each new Gecode version. We use two well-known puzzles to illustrate the system and present all available abstractions.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="7f1af31696d65ce3a1c1d0530a738efb" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":116154719,"asset_id":121216550,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/116154719/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="121216550"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="121216550"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 121216550; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=121216550]").text(description); $(".js-view-count[data-work-id=121216550]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 121216550; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='121216550']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "7f1af31696d65ce3a1c1d0530a738efb" } } $('.js-work-strip[data-work-id=121216550]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":121216550,"title":"The Mozart constraint subsystem: system presentation","internal_url":"https://www.academia.edu/121216550/The_Mozart_constraint_subsystem_system_presentation","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":116154719,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/116154719/thumbnails/1.jpg","file_name":"trics2013_submission_5.pdf","download_url":"https://www.academia.edu/attachments/116154719/download_file","bulk_download_file_name":"The_Mozart_constraint_subsystem_system_p.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/116154719/trics2013_submission_5-libre.pdf?1718786826=\u0026response-content-disposition=attachment%3B+filename%3DThe_Mozart_constraint_subsystem_system_p.pdf\u0026Expires=1740485735\u0026Signature=R50QUPzXF~SBex1IA3AjNQxnLx5AmYD7baV5AzNcMgMcvF7PRipsNtmPkOUk4iobjMZ06bcg5Bx9UrBwdufpEd48u-xd7BWgd9~zRXBqalm0kEw-T5827BMRTntyG-NYThj6WB8VxkjQ3HFN5t~nOMxBoPddsfqshAFJi3SdX5gqutF94GTAevhI4q0PEmEuI3dGOS-lQcz-CgFmmKfBNoNO8ApuGxJEpKlcc9bCl498Dj7whvaaPQBeZAGHLabRJQM7QgmDRKLYVi7IM2GlbXBltHfmndCOTQSRCqc6YxF4ir-jKb9CT6-2dlJ7GYekW7PLPUsh9DsSMy2IGidFAw__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="120575433"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/120575433/Designing_Distributed_Applications_Using_a_Phase_Aware_Reversible_System"><img alt="Research paper thumbnail of Designing Distributed Applications Using a Phase-Aware, Reversible System" class="work-thumbnail" src="https://attachments.academia-assets.com/115680691/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/120575433/Designing_Distributed_Applications_Using_a_Phase_Aware_Reversible_System">Designing Distributed Applications Using a Phase-Aware, Reversible System</a></div><div class="wp-workCard_item"><span>2017 IEEE International Conference on Edge Computing (EDGE)</span><span>, 2017</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Distributed applications will break down or perform poorly when there are too many failures (of n...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Distributed applications will break down or perform poorly when there are too many failures (of nodes and/or communication) in the operating environment. Failures happen frequently on edge networks including mobile and ad hoc networks, but are also unexpectedly common on the general Internet. We propose an approach for designing stressaware distributed applications that can take environment stress into account to improve their behavior. We give a concrete illustration of the approach by targeting applications built on top of a Structured Overlay Network (SON). Our underlying SON is Reversible and Phase-Aware. A system is Reversible if the set of operations it provides is a function (called the reversibility function) of its current stress (i.e., all perturbing effects of the environment, including faults), and does not depend on past stress. Reversibility generalizes standard fault tolerance with nested fault models. When the fault rate goes outside the scope of one model, then it is still inside the next one. In order to approximate the reversibility function we introduce the concept of Phase, which is a per-node property that gives a qualitative measure of the available system operations under the current stress. Phase can be determined with no extra distributed operations. We show that making the phase available to applications allows them to improve their behavior in environments with high and variable stress. We propose a Phase API and we design an application, a collaborative graphic editor, that takes advantage of phase to enhance self-adaptation and selfoptimization properties. Furthermore, we analyze how the application itself can achieve reversibility in the applicationlevel semantics. Using the phase of the underlying node, the application provides an indication to the user regarding its behavior. Thus, the application has improved behavior with respect to the user, i.e., the user can better understand and decide what to do in a high-stress environment.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="2c2bcd228da0ab0a137488e01dc466a3" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":115680691,"asset_id":120575433,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/115680691/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="120575433"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="120575433"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 120575433; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=120575433]").text(description); $(".js-view-count[data-work-id=120575433]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 120575433; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='120575433']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "2c2bcd228da0ab0a137488e01dc466a3" } } $('.js-work-strip[data-work-id=120575433]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":120575433,"title":"Designing Distributed Applications Using a Phase-Aware, Reversible System","internal_url":"https://www.academia.edu/120575433/Designing_Distributed_Applications_Using_a_Phase_Aware_Reversible_System","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":115680691,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/115680691/thumbnails/1.jpg","file_name":"08029257.pdf","download_url":"https://www.academia.edu/attachments/115680691/download_file","bulk_download_file_name":"Designing_Distributed_Applications_Using.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/115680691/08029257-libre.pdf?1717588855=\u0026response-content-disposition=attachment%3B+filename%3DDesigning_Distributed_Applications_Using.pdf\u0026Expires=1740457939\u0026Signature=gm3l1Ri7hvT6nWaKAYgcgpsk8sg0pzYKSxiHee5aBDhPFvpEdCBS5GWT1oxgg9B2Dtw690eeeaBkqai7V64YR85HxBxUEN1RxoYg2zkaT1NcDw5q5Zaymai2Z4Luv1kh9V5roW2mTETlV0zAm47d6J5hweROfg7H3KkXldggHnvKbyZeKLFiE4A-Is3~BCTPXjq7aMppIn8M50h1OUSMstOsOoOPKHqFTAcxocaFbYBlUWrjPHEwWdgecR0Whzh-gjEUV-9kbBow0Sutj3HUTNBjXCn07vjAKvLJ9hqAaQzlOY3Lma7bhbFQcUWiRwDyovRH8h3q0bhCL2cTkksp0w__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="120575409"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/120575409/Aquarius"><img alt="Research paper thumbnail of Aquarius" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/120575409/Aquarius">Aquarius</a></div><div class="wp-workCard_item"><span>ACM SIGARCH Computer Architecture News</span><span>, 1987</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="120575409"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="120575409"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 120575409; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=120575409]").text(description); $(".js-view-count[data-work-id=120575409]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 120575409; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='120575409']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=120575409]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":120575409,"title":"Aquarius","internal_url":"https://www.academia.edu/120575409/Aquarius","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="115685867"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/115685867/Programming_languages_for_distributed_applications"><img alt="Research paper thumbnail of Programming languages for distributed applications" class="work-thumbnail" src="https://attachments.academia-assets.com/112096505/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/115685867/Programming_languages_for_distributed_applications">Programming languages for distributed applications</a></div><div class="wp-workCard_item"><span>New Generation Computing</span><span>, Sep 1, 1998</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Much progress has been made in distributed computing in the areas of distribution structure, open...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Much progress has been made in distributed computing in the areas of distribution structure, open computing, fault tolerance, and security. Yet, writing distributed applications remains difficult because the programmer has to manage models of these areas explicitly. A major challenge is to integrate the four models into a coherent development platform. Such a platform should make it possible to cleanly separate an application's functionality from the other four concerns. Concurrent constraint programming, an evolution of concurrent logic programming, has both the expressiveness and the formal foundation needed to attempt this integration. As a first step, we have designed and built a platform that separates an application's functionality from its distribution structure. We have prototyped several collaborative tools with this platform, including a shared graphic editor whose design is presented in detail. The platform efficiently implements Distributed Oz, which extends the Oz language with constructs to express the distribution structure and with basic primitives for open computing, failure detection and handling, and resource control. Oz appears to the programmer as a concurrent object-oriented language with dataflow synchronization. Oz is based on a higher-order, state-aware, concurrent constraint computation model.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="ca4542d1b02cae5d1b758395a624e80b" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":112096505,"asset_id":115685867,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/112096505/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="115685867"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="115685867"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 115685867; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=115685867]").text(description); $(".js-view-count[data-work-id=115685867]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 115685867; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='115685867']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "ca4542d1b02cae5d1b758395a624e80b" } } $('.js-work-strip[data-work-id=115685867]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":115685867,"title":"Programming languages for distributed applications","internal_url":"https://www.academia.edu/115685867/Programming_languages_for_distributed_applications","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":112096505,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/112096505/thumbnails/1.jpg","file_name":"NGC_98.pdf","download_url":"https://www.academia.edu/attachments/112096505/download_file","bulk_download_file_name":"Programming_languages_for_distributed_ap.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/112096505/NGC_98-libre.pdf?1709583020=\u0026response-content-disposition=attachment%3B+filename%3DProgramming_languages_for_distributed_ap.pdf\u0026Expires=1740485735\u0026Signature=JEq4XFTxYaaXefPxpZhk4Al9wl~x8yQAuKGZOF02ssDRVjPSP1R~hKU4oE~JujZJvPBHQFqLCgz6Gp~UXgf0OyGL0N81pSL4ypoIaMSnjb4XaNRrfcYJ6t5HdjG~SiVL-i5n5kzYstE1shVT58txhsKJCjzzzi8OFPClX9DIuDUb~sptSjQ3R~FNw2fv9bGWAoJhlTF15iIm6s2OeB~PGkdGslc4VkSeGa-k6ToXh2-Nk~Eq9Gr40KbP40cjRk8qyOd6hzEQdTDS0PGAN1Ap7A1PCUEXIO4Ilua3HfFrg90otV~YrFFerkvUQZUjeXioD~VnpkWdqjyyrFg1NYOoJg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="114734849"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/114734849/Self_Management_for_Large_Scale_Distributed_Systems"><img alt="Research paper thumbnail of Self Management for Large-Scale Distributed Systems" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/114734849/Self_Management_for_Large_Scale_Distributed_Systems">Self Management for Large-Scale Distributed Systems</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Abstract. As Internet applications become larger and more complex, the task of managing them beco...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Abstract. As Internet applications become larger and more complex, the task of managing them becomes overwhelming. Abnormal events such as software updates, failures, attacks, and hotspots become frequent. The SELFMAN project is tackling this problem by combining two tech- ...</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="114734849"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="114734849"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 114734849; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=114734849]").text(description); $(".js-view-count[data-work-id=114734849]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 114734849; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='114734849']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=114734849]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":114734849,"title":"Self Management for Large-Scale Distributed Systems","internal_url":"https://www.academia.edu/114734849/Self_Management_for_Large_Scale_Distributed_Systems","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="113826545"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/113826545/Attach_me_detach_me_assemble_me_like_you_work_Detachable_user_interface_"><img alt="Research paper thumbnail of Attach me, detach me, assemble me like you work [Detachable user interface]" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/113826545/Attach_me_detach_me_assemble_me_like_you_work_Detachable_user_interface_">Attach me, detach me, assemble me like you work [Detachable user interface]</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Detachable user interfaces consist of graphical user interfaces whose parts or whole can be detac...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Detachable user interfaces consist of graphical user interfaces whose parts or whole can be detached at run-time from their host, migrated onto another computing platform while carrying out the task, possibly adapted to the new platform and attached to the target platform in a peer-to-peer fashion. Detaching is the property of splitting a part of a UI for transferring it onto another platform. Attaching is the reciprocal property: a part of an existing interface can be attached to the currently being used interface so as to recompose another one on-demand, according to user&#39;s needs, task requirements. Assembling interface parts by detaching and attaching allows dynamically composing, decomposing and re-composing new interfaces on demand. To support this interaction paradigm, a development infrastructure has been developed based on a series of primitives such as display, undisplay, copy, expose, return, transfer, delegate, and switch. We exemplify it with QTkDraw, a painting application with attaching and detaching based on the development infrastructure.Anglai</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="113826545"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="113826545"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 113826545; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=113826545]").text(description); $(".js-view-count[data-work-id=113826545]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 113826545; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='113826545']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=113826545]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":113826545,"title":"Attach me, detach me, assemble me like you work [Detachable user interface]","internal_url":"https://www.academia.edu/113826545/Attach_me_detach_me_assemble_me_like_you_work_Detachable_user_interface_","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="113342453"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/113342453/Migratable_User_Interface_Beyond_Migratory_Interfaces"><img alt="Research paper thumbnail of Migratable User Interface: Beyond Migratory Interfaces" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/113342453/Migratable_User_Interface_Beyond_Migratory_Interfaces">Migratable User Interface: Beyond Migratory Interfaces</a></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="113342453"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="113342453"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 113342453; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=113342453]").text(description); $(".js-view-count[data-work-id=113342453]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 113342453; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='113342453']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=113342453]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":113342453,"title":"Migratable User Interface: Beyond Migratory Interfaces","internal_url":"https://www.academia.edu/113342453/Migratable_User_Interface_Beyond_Migratory_Interfaces","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="112127422"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/112127422/A_history_of_the_Oz_multiparadigm_language"><img alt="Research paper thumbnail of A history of the Oz multiparadigm language" class="work-thumbnail" src="https://attachments.academia-assets.com/109453620/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/112127422/A_history_of_the_Oz_multiparadigm_language">A history of the Oz multiparadigm language</a></div><div class="wp-workCard_item"><span>Proceedings of the ACM on Programming Languages</span><span>, 2020</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Oz is a programming language designed to support multiple programming paradigms in a clean factor...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Oz is a programming language designed to support multiple programming paradigms in a clean factored way that is easy to program despite its broad coverage. It started in 1991 as a collaborative effort by the DFKI (Germany) and SICS (Sweden) and led to an influential system, Mozart, that was released in 1999 and widely used in the 2000s for practical applications and education. We give the history of Oz as it developed from its origins in logic programming, starting with Prolog, followed by concurrent logic programming and constraint logic programming, and leading to its two direct precursors, the concurrent constraint model and the Andorra Kernel Language (AKL). We give the lessons learned from the Oz effort including successes and failures and we explain the principles underlying the Oz design. Oz is defined through a kernel language, which is a formal model similar to a foundational calculus, but that is designed to be directly useful to the programmer. The kernel language is orga...</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="9acc0ea41624497e167e95b626da2aae" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":109453620,"asset_id":112127422,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/109453620/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="112127422"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="112127422"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 112127422; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=112127422]").text(description); $(".js-view-count[data-work-id=112127422]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 112127422; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='112127422']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "9acc0ea41624497e167e95b626da2aae" } } $('.js-work-strip[data-work-id=112127422]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":112127422,"title":"A history of the Oz multiparadigm language","internal_url":"https://www.academia.edu/112127422/A_history_of_the_Oz_multiparadigm_language","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":109453620,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/109453620/thumbnails/1.jpg","file_name":"3386333.pdf","download_url":"https://www.academia.edu/attachments/109453620/download_file","bulk_download_file_name":"A_history_of_the_Oz_multiparadigm_langua.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/109453620/3386333-libre.pdf?1703329118=\u0026response-content-disposition=attachment%3B+filename%3DA_history_of_the_Oz_multiparadigm_langua.pdf\u0026Expires=1740485735\u0026Signature=QZp6enehpMTkv-TVNUXesNyRvCaAr8d6g04e0NBIqr0pkTaz6P38VnX4GvlGGIIMSH6gzl2mqFamyr2flvpHIznNvXZ6v75ytwpFPw0DL0yaEXBYrsK1Ky3Arrj-XvgS~8b6afaApupGgdiEdu6exe0VYMtB0YL8ScarU-SPV4zWhZqh4HFf~4c2yEED6LzTPcVnaJTsGG31zrtatwP~RhFV-mgk7SiX5odorZLaj5IF0bGV01FBewH0Nl4m6BiEBqhnvki-jThd2bh-81wxjCRCc~~XAD5GOzO-P5KVxIZPbRf2twjwCzWdSDUy6VZqKsau57u4kqXWYknGHfq6FA__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"},{"id":109453621,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/109453621/thumbnails/1.jpg","file_name":"3386333.pdf","download_url":"https://www.academia.edu/attachments/109453621/download_file","bulk_download_file_name":"A_history_of_the_Oz_multiparadigm_langua.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/109453621/3386333-libre.pdf?1703329111=\u0026response-content-disposition=attachment%3B+filename%3DA_history_of_the_Oz_multiparadigm_langua.pdf\u0026Expires=1740485735\u0026Signature=JtXLtaHk1s3fTfLuHwDiE-gnjXqk~WNTu6FrlM3mQ29D0TSsoUKCJ43YKoXnDmwIMU3S8jwC02dTe6zMxayXz0pXZwL38xBM1P0cHiQeyBm~F35gDMZDli9ZLK6W0~Ntapn5~fJQn~~e00~sbag88AkEIzKF4-MIF46twNRThjvlXTI80f6V4KVviF~bBkuW3Lgr3Hh5z-6dRi2lZmdXLVPpuTPNbqaZ8NZnNq90SRPuj-7T4NTcQ5tgz6RHZGGMn4NhZUy3Ec~c9~TJapaAHwJb0~qa49mD7leHrQvxjUlqE~k0XbPJSa3If8AjVZcR73HYteHTigRWh6u16OsBuA__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738467"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738467/Lasp"><img alt="Research paper thumbnail of Lasp" class="work-thumbnail" src="https://attachments.academia-assets.com/107045074/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738467/Lasp">Lasp</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">We propose Lasp, a new programming model designed to simplify large-scale distributed programming...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">We propose Lasp, a new programming model designed to simplify large-scale distributed programming. Lasp combines ideas from deterministic dataflow programming together with conflictfree replicated data types (CRDTs). This provides support for computations where not all participants are online together at a given moment. The initial design presented here provides powerful primitives for composing CRDTs, which lets us write long-lived faulttolerant distributed applications with nonmonotonic behavior in a monotonic framework. Given reasonable models of node-to-node communications and node failures, we prove formally that a Lasp program can be considered as a functional program that supports functional reasoning and programming techniques. We have implemented Lasp as an Erlang library built on top of the Riak Core distributed systems framework. We have developed one nontrivial large-scale application, the advertisement counter scenario from the SyncFree research project. We plan to extend our current prototype into a general-purpose language in which synchronization is used as little as possible.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="6aef58a07cae086aa7e80c3c4e8ff941" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045074,"asset_id":108738467,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045074/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738467"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738467"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738467; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738467]").text(description); $(".js-view-count[data-work-id=108738467]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738467; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738467']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "6aef58a07cae086aa7e80c3c4e8ff941" } } $('.js-work-strip[data-work-id=108738467]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738467,"title":"Lasp","internal_url":"https://www.academia.edu/108738467/Lasp","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045074,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045074/thumbnails/1.jpg","file_name":"ppdp-2015-preprint.pdf","download_url":"https://www.academia.edu/attachments/107045074/download_file","bulk_download_file_name":"Lasp.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045074/ppdp-2015-preprint-libre.pdf?1698694868=\u0026response-content-disposition=attachment%3B+filename%3DLasp.pdf\u0026Expires=1740485735\u0026Signature=Pf45MSGQNxPwyyckJpKoOzmAluoxdmCBeiZrdd7Xfx4WLIAa7DQV5M8OfxevLjRaJnen-5gCR1R0ODnGiJT-KtJ6ebyfdkBOivHIfxmxmuxLrSLmWhUkPFK~ppsiwYNqW~b19WCiVtte0KiurglOJ28kN0G-4-mmjdh72txvx6gjqTxTWXwCxXFb6yCS2MKYatDsh7Qgg7d3TfPht55oCZIQ1pow9L6H1SD5eTNP3Vqlf-J8LYOAaceh-THBY6YJWTYIxuv6Oa8ePtk~iFKHHB5l50Z7OKJEn2pA-z3c89sbVItvlfGKnHE28ttfuzFKhPx2TA2GCCS5BfnCuI87xg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738465"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738465/A_Relaxed_Ring_for_Self_Organising_and_Fault_Tolerant_Peer_to_Peer_Networks"><img alt="Research paper thumbnail of A Relaxed-Ring for Self-Organising and Fault-Tolerant Peer-to-Peer Networks" class="work-thumbnail" src="https://attachments.academia-assets.com/107045028/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738465/A_Relaxed_Ring_for_Self_Organising_and_Fault_Tolerant_Peer_to_Peer_Networks">A Relaxed-Ring for Self-Organising and Fault-Tolerant Peer-to-Peer Networks</a></div><div class="wp-workCard_item"><span>Proceedings</span><span>, Nov 1, 2007</span></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">There is no doubt about the increase in popularity of decentralised systems over the classical cl...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">There is no doubt about the increase in popularity of decentralised systems over the classical client-server architecture in distributed applications. These systems are developed mainly as peer-to-peer networks where it is possible to observe many strategies to organise the peers. The most popular one for structured networks is the ring topology. Despite many advantages offered by this topology, the maintenance of the ring is very costly, being difficult to guarantee lookup consistency and fault-tolerance all the time. By increasing self-management in the system we are able to deal with these issues. We model ring maintenance as a selforganising and self-healing system using feedback loops. As a result, we introduce a novel relaxed-ring topology that is able to provide fault-tolerance with realistic assumptions concerning failure detection. Limitations related to failure handling are clearly identified, providing strong guarantees to develop applications on top of the relaxed-ring architecture. Besides permanent failures, the paper analyses temporary failures and broken links, which are often ignored.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="0884323e7b02a2e63b3d52c0fe9592ed" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045028,"asset_id":108738465,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045028/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738465"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738465"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738465; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738465]").text(description); $(".js-view-count[data-work-id=108738465]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738465; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738465']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "0884323e7b02a2e63b3d52c0fe9592ed" } } $('.js-work-strip[data-work-id=108738465]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738465,"title":"A Relaxed-Ring for Self-Organising and Fault-Tolerant Peer-to-Peer Networks","internal_url":"https://www.academia.edu/108738465/A_Relaxed_Ring_for_Self_Organising_and_Fault_Tolerant_Peer_to_Peer_Networks","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045028,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045028/thumbnails/1.jpg","file_name":"selfman-ring.pdf","download_url":"https://www.academia.edu/attachments/107045028/download_file","bulk_download_file_name":"A_Relaxed_Ring_for_Self_Organising_and_F.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045028/selfman-ring-libre.pdf?1698694871=\u0026response-content-disposition=attachment%3B+filename%3DA_Relaxed_Ring_for_Self_Organising_and_F.pdf\u0026Expires=1740457939\u0026Signature=E10yd52JDl4Eb052fGzYBCxO~fSSmk46JTmOqewJYaGl~5DS~35MWzNgTbUeX4UZg2-~ezJDGloWD5EkuO25MPFFQPegkBSX2THcFEfeIUQwjxxn4k67c5rKT8AKCbPSJsDWHS1mA-MrAdH0Px0Na884KmJs0MsvkYbOwX9pyzqgVzSDOxO8ZJwAfYCvneqyn6X0UrrpwPPGGZ8hipSEiCHpcRT2GStY8PAx17Xu~Ypg2nh-bch3NE~cakRrK~FU9Sycqt2PHuh8xfK1UjC-XVKKpMeEUK59u4igwWhFxuFcPC64mgs-LlJgNmLsOc1KjaZHKjDv9W0QryhBSX8Wdg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"},{"id":107045027,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045027/thumbnails/1.jpg","file_name":"selfman-ring.pdf","download_url":"https://www.academia.edu/attachments/107045027/download_file","bulk_download_file_name":"A_Relaxed_Ring_for_Self_Organising_and_F.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045027/selfman-ring-libre.pdf?1698694869=\u0026response-content-disposition=attachment%3B+filename%3DA_Relaxed_Ring_for_Self_Organising_and_F.pdf\u0026Expires=1740457939\u0026Signature=K6~p2wq1TOZ3GSkL~NshPG8RZQyIO-gz0G5oaV-63osxedfUJkkCSjgk9SkTc87Y4z4en97F5zUZbnP2FOoOe~libms7XTWs8qFzCb0mVzdwzSwUmhEFbOtOTP6dw~2DyskgvU7RHJiy0QJtzVsYk9lBXkMF9It90r0MMsFLW082hz987~u~DaQYL8OpUhipKdjwnKfRVoyrdatk6Nin5cWPm-MS~Jiz1RciEc4RxybxKDxhb64osaAn~UOJgVbST8YEwnNI3vUjNvJMLKP~gl4JuypJ2v3mgcc2xhKnr35X2z4bQeKnnVDgeiKCkqvD~jhtrD2dgVScoxkEdmwMZQ__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738464"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738464/Selective_Hearing_An_Approach_to_Distributed_Eventually_Consistent_Edge_Computation"><img alt="Research paper thumbnail of Selective Hearing: An Approach to Distributed, Eventually Consistent Edge Computation" class="work-thumbnail" src="https://attachments.academia-assets.com/107045075/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738464/Selective_Hearing_An_Approach_to_Distributed_Eventually_Consistent_Edge_Computation">Selective Hearing: An Approach to Distributed, Eventually Consistent Edge Computation</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">We present a new programming model for largescale mobile and "Internet of Things" style distribut...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">We present a new programming model for largescale mobile and "Internet of Things" style distributed applications. The model consists of two layers: a language layer based on the Lasp language with a runtime layer based on epidemic broadcast. The Lasp layer provides deterministic coordinationfree computation primitives based on conflict-free replicated data types (CRDTs). The epidemic broadcast layer is based on the Plumtree protocol. It provides a communication framework where clients may only have a partial view of membership and may not want to participate in or have knowledge of all active computations. We motivate the new model with a nontrivial mobile application, a distributed ad counter, and we give the model's formal semantics.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="62c9e4f3eee7aaa95751547ef62b63b9" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045075,"asset_id":108738464,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045075/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738464"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738464"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738464; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738464]").text(description); $(".js-view-count[data-work-id=108738464]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738464; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738464']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "62c9e4f3eee7aaa95751547ef62b63b9" } } $('.js-work-strip[data-work-id=108738464]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738464,"title":"Selective Hearing: An Approach to Distributed, Eventually Consistent Edge Computation","internal_url":"https://www.academia.edu/108738464/Selective_Hearing_An_Approach_to_Distributed_Eventually_Consistent_Edge_Computation","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045075,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045075/thumbnails/1.jpg","file_name":"wpsds-2015-preprint.pdf","download_url":"https://www.academia.edu/attachments/107045075/download_file","bulk_download_file_name":"Selective_Hearing_An_Approach_to_Distrib.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045075/wpsds-2015-preprint-libre.pdf?1698694874=\u0026response-content-disposition=attachment%3B+filename%3DSelective_Hearing_An_Approach_to_Distrib.pdf\u0026Expires=1740485735\u0026Signature=WmTVmHxNhSyQwrAVSaFWW7XatJFy3-5jtjOD1uQXRlOIe7sAQHNyA7KjiHMcf6QoQTWvSbO5xNpdglZnIkDD7K5LNGQArkvVTrLWhOEPm1PGeiqDeQYsQi1sROu4lkihlIMSnfq86ZAXAhuBG1XYCSG2EzQXgUJd3NFIuuWQQA7D8sEx1o3eVufaRdTROiVxn76pqs6uLaZ7~gbB3Ayblwizz6pWArIGRYAu5D2T3w9k~BTsMtyru8tnIFok4wQL~1Yz8ndyYv3NGtiavDS0CGYKOHAw1NGJQoZtvcsJdzGG~pzkTSyas-ILRYLZnaH7dzr7-Z79hZIzxnwqVjwPDA__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738463"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/108738463/Integrating_Records_into_Concurrent_Constraint_Programming_A_Case_Study_for_DFKI_Oz_Abstract_"><img alt="Research paper thumbnail of Integrating Records into Concurrent Constraint Programming: A Case Study for DFKI Oz (Abstract)" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/108738463/Integrating_Records_into_Concurrent_Constraint_Programming_A_Case_Study_for_DFKI_Oz_Abstract_">Integrating Records into Concurrent Constraint Programming: A Case Study for DFKI Oz (Abstract)</a></div><div class="wp-workCard_item"><span>WLP</span><span>, 1995</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738463"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738463"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738463; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738463]").text(description); $(".js-view-count[data-work-id=108738463]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738463; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738463']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=108738463]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738463,"title":"Integrating Records into Concurrent Constraint Programming: A Case Study for DFKI Oz (Abstract)","internal_url":"https://www.academia.edu/108738463/Integrating_Records_into_Concurrent_Constraint_Programming_A_Case_Study_for_DFKI_Oz_Abstract_","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738462"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738462/The_implementation_and_use_of_a_generic_dataflow_behaviour_in_Erlang"><img alt="Research paper thumbnail of The implementation and use of a generic dataflow behaviour in Erlang" class="work-thumbnail" src="https://attachments.academia-assets.com/107045072/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738462/The_implementation_and_use_of_a_generic_dataflow_behaviour_in_Erlang">The implementation and use of a generic dataflow behaviour in Erlang</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">We propose a new "generic" abstraction for Erlang/OTP that aids in the implementation of dataflow...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">We propose a new "generic" abstraction for Erlang/OTP that aids in the implementation of dataflow programming languages and models on the Erlang VM. This abstraction simplifies the implementation of "processing elements" in dataflow languages by providing a simple callback interface in the style of the gen server and gen fsm abstractions. We motivate the use of this new abstraction by examining the implementation of a distributed dataflow programming variant called Lasp.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="a9c341139850592092dcb49cd1c6ebf7" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045072,"asset_id":108738462,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045072/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738462"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738462"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738462; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738462]").text(description); $(".js-view-count[data-work-id=108738462]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738462; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738462']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "a9c341139850592092dcb49cd1c6ebf7" } } $('.js-work-strip[data-work-id=108738462]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738462,"title":"The implementation and use of a generic dataflow behaviour in Erlang","internal_url":"https://www.academia.edu/108738462/The_implementation_and_use_of_a_generic_dataflow_behaviour_in_Erlang","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045072,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045072/thumbnails/1.jpg","file_name":"erlang-workshop-2015.pdf","download_url":"https://www.academia.edu/attachments/107045072/download_file","bulk_download_file_name":"The_implementation_and_use_of_a_generic.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045072/erlang-workshop-2015-libre.pdf?1698694866=\u0026response-content-disposition=attachment%3B+filename%3DThe_implementation_and_use_of_a_generic.pdf\u0026Expires=1740485735\u0026Signature=bezCAWeiywfgx4RnWvMRwUqgImCYsNHqTT-eP3uYAvkFKyJVXa8vcBGe0X-Fune9u3hcDj6dIAgQCE6PLFNJqHMfO-rNcOIoT3lxYcKszPCmJgsGIcx4x2yxUwCvkbw0mePthV90-Ikqq4YinZNaP149o5JvEnjQzEh4wq2s9Uslqrphgdc5fI1jJbwAxUmUEatgq6wM2eiqqyy4YjUMmsujExGh37kX0DEkXrbHtSKOfJ-p7UBkW2xDR5vlG6QoeQfFadEh~Z2hTuY9V9TrMgu9h4xWFtTNU3rQ0JaJxbiqs-Y5JKEE38vQ5G0E0D1-9-9VlH6Q1kL96M~dvPUuHw__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738461"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" rel="nofollow" href="https://www.academia.edu/108738461/LightKone_Towards_General_Purpose_Computations_on_the_Edge"><img alt="Research paper thumbnail of LightKone: Towards General Purpose Computations on the Edge" class="work-thumbnail" src="https://a.academia-assets.com/images/blank-paper.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" rel="nofollow" href="https://www.academia.edu/108738461/LightKone_Towards_General_Purpose_Computations_on_the_Edge">LightKone: Towards General Purpose Computations on the Edge</a></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738461"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738461"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738461; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738461]").text(description); $(".js-view-count[data-work-id=108738461]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738461; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738461']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (false){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "-1" } } $('.js-work-strip[data-work-id=108738461]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738461,"title":"LightKone: Towards General Purpose Computations on the Edge","internal_url":"https://www.academia.edu/108738461/LightKone_Towards_General_Purpose_Computations_on_the_Edge","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738460"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738460/Exploiting_speculation_in_partially_replicated_transactional_data_stores"><img alt="Research paper thumbnail of Exploiting speculation in partially replicated transactional data stores" class="work-thumbnail" src="https://attachments.academia-assets.com/107045070/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738460/Exploiting_speculation_in_partially_replicated_transactional_data_stores">Exploiting speculation in partially replicated transactional data stores</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">Information systems → Distributed database transactions; Storage replication; Online services are...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">Information systems → Distributed database transactions; Storage replication; Online services are often deployed over geographically-scattered data centers (geo-replication), which allows services to be highly available and reduces access latency. On the down side, to provide ACID transactions, global certification (i.e., across data centers) is needed to detect conflicts between concurrent transactions executing at different data centers. The global certification phase reduces throughput because transactions need to hold pre-commit locks, and it increases client-perceived latency because global certification lies in the critical path of transaction execution.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="860995c6a5e1ac70fbe301d129a2b85b" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045070,"asset_id":108738460,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045070/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738460"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738460"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738460; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738460]").text(description); $(".js-view-count[data-work-id=108738460]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738460; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738460']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "860995c6a5e1ac70fbe301d129a2b85b" } } $('.js-work-strip[data-work-id=108738460]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738460,"title":"Exploiting speculation in partially replicated transactional data stores","internal_url":"https://www.academia.edu/108738460/Exploiting_speculation_in_partially_replicated_transactional_data_stores","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045070,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045070/thumbnails/1.jpg","file_name":"SOCC17.pdf","download_url":"https://www.academia.edu/attachments/107045070/download_file","bulk_download_file_name":"Exploiting_speculation_in_partially_repl.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045070/SOCC17-libre.pdf?1698694861=\u0026response-content-disposition=attachment%3B+filename%3DExploiting_speculation_in_partially_repl.pdf\u0026Expires=1740485735\u0026Signature=LZNU9sZo8WYpgmimCR0xP9UOBB~RUq5XBmAu6CPEPVYOWTU0ngwNljBK9DzDEYh6SfLNTvPq2WxKtUdThdpRKR0ZDY2eaSUWOElttTwSs98u80tQEKjZkJkRORisq07x-~OgWrsWhjfubgdwCb5uN85Gjk2JxoAXynayNdbg6Qjz6jyNT7ClyIw8b7PG0fsjOflQkMG0i~PvxcKQk9mNkXRS4AtA1IwJCtUyXYxcBwbQH-6mGbInIOG0~ErCPFjvN4w-pkHOd~9AO7FofxPJctTlj1xsWbAU2v12m~Zx7z8WQiE-TM0Isvdmes62--uHRs4Qmu43LL9KBEZ8Q0~3yA__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738459"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738459/A_detailed_algorithm_testing_guards_over_feature_trees"><img alt="Research paper thumbnail of A detailed algorithm testing guards over feature trees" class="work-thumbnail" src="https://attachments.academia-assets.com/107045068/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738459/A_detailed_algorithm_testing_guards_over_feature_trees">A detailed algorithm testing guards over feature trees</a></div><div class="wp-workCard_item"><span>Lecture Notes in Computer Science</span><span>, 1995</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="666f70c2410c8a3ca8f60084c11abe93" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045068,"asset_id":108738459,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045068/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738459"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738459"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738459; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738459]").text(description); $(".js-view-count[data-work-id=108738459]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738459; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738459']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "666f70c2410c8a3ca8f60084c11abe93" } } $('.js-work-strip[data-work-id=108738459]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738459,"title":"A detailed algorithm testing guards over feature trees","internal_url":"https://www.academia.edu/108738459/A_detailed_algorithm_testing_guards_over_feature_trees","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045068,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045068/thumbnails/1.jpg","file_name":"9783540594796.pdf","download_url":"https://www.academia.edu/attachments/107045068/download_file","bulk_download_file_name":"A_detailed_algorithm_testing_guards_over.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045068/9783540594796-libre.pdf?1698694860=\u0026response-content-disposition=attachment%3B+filename%3DA_detailed_algorithm_testing_guards_over.pdf\u0026Expires=1740457939\u0026Signature=B8Y~MGIHeWi8~L5fyhkAgBavNI5vVVoCxxJVoDSvax-5f4IV0Q4ghFrL10FQvp77w-~XwWrji7lAOstMtEfO90wavqMmdAefEmEbluss6ahSgr~vd3HjWqNhwzhBWjH6r-L36X3UZ1QpT9JOJAwsSQ5sgB6kHgTG3Hc6xwSE2KdcA~AsxfAExfpBPLaALRtrQoA1B0jOf9OVJ9oCeaEGe6EUTu6IjgqcPwAsW5Xxckhu6wZgCqkdRRNTEp47PwJwBh-h2OalUdkRDsG0RAmGNHtdXR70deL0ux7MgSq8uGa8owsvGJzDLSGZxK4Oy64XKOi~G7yjjjWUI00NoC~tzw__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738457"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738457/Mind_Your_Outcomes_The_Q_approach_to_Quality_Centric_Systems_Development_and_Its_Application_to_a_Blockchain_Case_Study"><img alt="Research paper thumbnail of Mind Your Outcomes: The ∆Q approach to Quality-Centric Systems Development and Its Application to a Blockchain Case-Study" class="work-thumbnail" src="https://attachments.academia-assets.com/107045063/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738457/Mind_Your_Outcomes_The_Q_approach_to_Quality_Centric_Systems_Development_and_Its_Application_to_a_Blockchain_Case_Study">Mind Your Outcomes: The ∆Q approach to Quality-Centric Systems Development and Its Application to a Blockchain Case-Study</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">† This paper is an extended version of our paper published in 33 rd Symposium on Implementation a...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">† This paper is an extended version of our paper published in 33 rd Symposium on Implementation and Application of Functional Languages (IFL21), as a draft.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="43087673c54d9010aad4ddede3531ade" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045063,"asset_id":108738457,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045063/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738457"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738457"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738457; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738457]").text(description); $(".js-view-count[data-work-id=108738457]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738457; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738457']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "43087673c54d9010aad4ddede3531ade" } } $('.js-work-strip[data-work-id=108738457]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738457,"title":"Mind Your Outcomes: The ∆Q approach to Quality-Centric Systems Development and Its Application to a Blockchain Case-Study","internal_url":"https://www.academia.edu/108738457/Mind_Your_Outcomes_The_Q_approach_to_Quality_Centric_Systems_Development_and_Its_Application_to_a_Blockchain_Case_Study","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045063,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045063/thumbnails/1.jpg","file_name":"download.pdf","download_url":"https://www.academia.edu/attachments/107045063/download_file","bulk_download_file_name":"Mind_Your_Outcomes_The_Q_approach_to_Qua.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045063/download-libre.pdf?1698694906=\u0026response-content-disposition=attachment%3B+filename%3DMind_Your_Outcomes_The_Q_approach_to_Qua.pdf\u0026Expires=1740485735\u0026Signature=CQ51sAv~uYg~OYNG9A2cpRbi1sNRcyiIGFi6RikZXtCrPJcuQWNa~Mm4kAAoDp-sWodhzDkApGaAPt~cF3bhmsSQDAOc5RcFMxiiLxuXzPWYFvK07mmepsp8-6IBXEhQmXfZjjkc8bFLpOJ9iap5naFxai-KyWc8dB6HICYuGwG4mbHe~4pXzA3t1PSWE0fzrsDZYfRd0j37CKKHDHoN-L7ODpOrn7DodiSL5YZNBl~A1m6Kd3rLTmltvz-HMKDdjLomTi05CIt0bFobMJYZ~CFrvrJUAOpGXnYh4Qe0T3U7yg4lCk2ihbmYbfrb96l2o3i3kSfJEt5gon6CyGUTmQ__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> <div class="js-work-strip profile--work_container" data-work-id="108738456"><div class="profile--work_thumbnail hidden-xs"><a class="js-work-strip-work-link" data-click-track="profile-work-strip-thumbnail" href="https://www.academia.edu/108738456/Transparent_speculation_in_geo_replicated_transactional_data_stores"><img alt="Research paper thumbnail of Transparent speculation in geo-replicated transactional data stores" class="work-thumbnail" src="https://attachments.academia-assets.com/107045069/thumbnails/1.jpg" /></a></div><div class="wp-workCard wp-workCard_itemContainer"><div class="wp-workCard_item wp-workCard--title"><a class="js-work-strip-work-link text-gray-darker" data-click-track="profile-work-strip-title" href="https://www.academia.edu/108738456/Transparent_speculation_in_geo_replicated_transactional_data_stores">Transparent speculation in geo-replicated transactional data stores</a></div><div class="wp-workCard_item"><span class="js-work-more-abstract-truncated">This work presents Speculative Transaction Replication (STR), a protocol that exploits transparen...</span><a class="js-work-more-abstract" data-broccoli-component="work_strip.more_abstract" data-click-track="profile-work-strip-more-abstract" href="javascript:;"><span> more </span><span><i class="fa fa-caret-down"></i></span></a><span class="js-work-more-abstract-untruncated hidden">This work presents Speculative Transaction Replication (STR), a protocol that exploits transparent speculation techniques to enhance performance of geo-distributed, partially replicated transactional data stores. In addition, we define a new consistency model, Speculative Snapshot Isolation (SPSI), that extends the semantics of Snapshot Isolation (SI) to shelter applications from the subtle anomalies that can arise from using speculative transaction processing. SPSI extends SI in an intuitive and rigorous fashion by specifying desirable atomicity and isolation guarantees that must hold when using speculative execution. STR provides a form of speculation that is fully transparent for programmers (it does not expose the effects of misspeculations to clients). Since the speculation techniques employed by STR satisfy SPSI, they can be leveraged by application programs in a transparent way, without requiring any source-code modification to applications designed to operate using SI. STR combines two key techniques: speculative reads, which allow transactions to observe pre-committed versions, which can reduce the 'effective duration' of pre-commit locks and enhance throughput; Precise Clocks, a novel timestamping mechanism that uses per-item timestamps with physical clocks, which together greatly enhance the probability of successful speculation. We assess STR's performance on up to nine geo-distributed Amazon EC2 data centers, using both synthetic benchmarks as well as realistic benchmarks (TPC-C and RUBiS). Our evaluation shows that STR achieves throughput gains up to 11× and latency reduction up to 10×, in workloads characterized by low inter-data center contention. Furthermore, thanks to a self-tuning mechanism that dynamically and transparently enables and disables speculation, STR offers robust performance even when faced with unfavourable workloads that suffer from high misspeculation rates.</span></div><div class="wp-workCard_item wp-workCard--actions"><span class="work-strip-bookmark-button-container"></span><a id="cf66ebe241759337dc1682a2d1814e5e" class="wp-workCard--action" rel="nofollow" data-click-track="profile-work-strip-download" data-download="{"attachment_id":107045069,"asset_id":108738456,"asset_type":"Work","button_location":"profile"}" href="https://www.academia.edu/attachments/107045069/download_file?s=profile"><span><i class="fa fa-arrow-down"></i></span><span>Download</span></a><span class="wp-workCard--action visible-if-viewed-by-owner inline-block" style="display: none;"><span class="js-profile-work-strip-edit-button-wrapper profile-work-strip-edit-button-wrapper" data-work-id="108738456"><a class="js-profile-work-strip-edit-button" tabindex="0"><span><i class="fa fa-pencil"></i></span><span>Edit</span></a></span></span></div><div class="wp-workCard_item wp-workCard--stats"><span><span><span class="js-view-count view-count u-mr2x" data-work-id="108738456"><i class="fa fa-spinner fa-spin"></i></span><script>$(function () { var workId = 108738456; window.Academia.workViewCountsFetcher.queue(workId, function (count) { var description = window.$h.commaizeInt(count) + " " + window.$h.pluralize(count, 'View'); $(".js-view-count[data-work-id=108738456]").text(description); $(".js-view-count[data-work-id=108738456]").attr('title', description).tooltip(); }); });</script></span></span><span><span class="percentile-widget hidden"><span class="u-mr2x work-percentile"></span></span><script>$(function () { var workId = 108738456; window.Academia.workPercentilesFetcher.queue(workId, function (percentileText) { var container = $(".js-work-strip[data-work-id='108738456']"); container.find('.work-percentile').text(percentileText.charAt(0).toUpperCase() + percentileText.slice(1)); container.find('.percentile-widget').show(); container.find('.percentile-widget').removeClass('hidden'); }); });</script></span></div><div id="work-strip-premium-row-container"></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/work_edit-ad038b8c047c1a8d4fa01b402d530ff93c45fee2137a149a4a5398bc8ad67560.js"], function() { // from javascript_helper.rb var dispatcherData = {} if (true){ window.WowProfile.dispatcher = window.WowProfile.dispatcher || _.clone(Backbone.Events); dispatcherData = { dispatcher: window.WowProfile.dispatcher, downloadLinkId: "cf66ebe241759337dc1682a2d1814e5e" } } $('.js-work-strip[data-work-id=108738456]').each(function() { if (!$(this).data('initialized')) { new WowProfile.WorkStripView({ el: this, workJSON: {"id":108738456,"title":"Transparent speculation in geo-replicated transactional data stores","internal_url":"https://www.academia.edu/108738456/Transparent_speculation_in_geo_replicated_transactional_data_stores","owner_id":3547736,"coauthors_can_edit":true,"owner":{"id":3547736,"first_name":"Peter","middle_initials":null,"last_name":"Van Roy","page_name":"PeterVanRoy","domain_name":"uclouvain","created_at":"2013-03-22T23:16:54.235-07:00","display_name":"Peter Van Roy","url":"https://uclouvain.academia.edu/PeterVanRoy"},"attachments":[{"id":107045069,"title":"","file_type":"pdf","scribd_thumbnail_url":"https://attachments.academia-assets.com/107045069/thumbnails/1.jpg","file_name":"str_hpdc_cr_final.pdf","download_url":"https://www.academia.edu/attachments/107045069/download_file","bulk_download_file_name":"Transparent_speculation_in_geo_replicate.pdf","bulk_download_url":"https://d1wqtxts1xzle7.cloudfront.net/107045069/str_hpdc_cr_final-libre.pdf?1698694885=\u0026response-content-disposition=attachment%3B+filename%3DTransparent_speculation_in_geo_replicate.pdf\u0026Expires=1740457939\u0026Signature=H5b4Q0Q4J9Dz053C2yL3qlYsi6OUIxFu5J7GR1PsUrxLv3A8jbGLTma4ACIS5wm8TBXkMLxVQMyMVOtTyNzmazQhfNZeLFrjQaW67g~0IxpgrF~rM7OEEV5EFK2smLMyTCUnORJgQ6mpaNSmGgtsN0GZJDNwBYsaKapIcWunDnza6B59tGq2bKfClxcMIiY90d55EE7FLxtyR2n4-Gth-chP0e0UYfLrptZUcPTmNrutCu1TuOH4bjzaWqqEEeEwLeeySXJN3HOU7dz2nBhrAKtxUrUF8h1ql3Uq0v3d6YgSYx6sUz-6OUnMg25uKPoOHmVQPWj~-QknZz5Lcn2tMg__\u0026Key-Pair-Id=APKAJLOHF5GGSLRBV4ZA"}]}, dispatcherData: dispatcherData }); $(this).data('initialized', true); } }); $a.trackClickSource(".js-work-strip-work-link", "profile_work_strip") }); </script> </div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js","https://a.academia-assets.com/assets/google_contacts-0dfb882d836b94dbcb4a2d123d6933fc9533eda5be911641f20b4eb428429600.js"], function() { // from javascript_helper.rb $('.js-google-connect-button').click(function(e) { e.preventDefault(); GoogleContacts.authorize_and_show_contacts(); Aedu.Dismissibles.recordClickthrough("WowProfileImportContactsPrompt"); }); $('.js-update-biography-button').click(function(e) { e.preventDefault(); Aedu.Dismissibles.recordClickthrough("UpdateUserBiographyPrompt"); $.ajax({ url: $r.api_v0_profiles_update_about_path({ subdomain_param: 'api', about: "", }), type: 'PUT', success: function(response) { location.reload(); } }); }); $('.js-work-creator-button').click(function (e) { e.preventDefault(); window.location = $r.upload_funnel_document_path({ source: encodeURIComponent(""), }); }); $('.js-video-upload-button').click(function (e) { e.preventDefault(); window.location = $r.upload_funnel_video_path({ source: encodeURIComponent(""), }); }); $('.js-do-this-later-button').click(function() { $(this).closest('.js-profile-nag-panel').remove(); Aedu.Dismissibles.recordDismissal("WowProfileImportContactsPrompt"); }); $('.js-update-biography-do-this-later-button').click(function(){ $(this).closest('.js-profile-nag-panel').remove(); Aedu.Dismissibles.recordDismissal("UpdateUserBiographyPrompt"); }); $('.wow-profile-mentions-upsell--close').click(function(){ $('.wow-profile-mentions-upsell--panel').hide(); Aedu.Dismissibles.recordDismissal("WowProfileMentionsUpsell"); }); $('.wow-profile-mentions-upsell--button').click(function(){ Aedu.Dismissibles.recordClickthrough("WowProfileMentionsUpsell"); }); new WowProfile.SocialRedesignUserWorks({ initialWorksOffset: 20, allWorksOffset: 20, maxSections: 1 }) }); </script> </div></div></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/wow_profile_edit-5ea339ee107c863779f560dd7275595239fed73f1a13d279d2b599a28c0ecd33.js","https://a.academia-assets.com/assets/add_coauthor-22174b608f9cb871d03443cafa7feac496fb50d7df2d66a53f5ee3c04ba67f53.js","https://a.academia-assets.com/assets/tab-dcac0130902f0cc2d8cb403714dd47454f11fc6fb0e99ae6a0827b06613abc20.js","https://a.academia-assets.com/assets/wow_profile-a9bf3a2bc8c89fa2a77156577594264ee8a0f214d74241bc0fcd3f69f8d107ac.js"], function() { // from javascript_helper.rb window.ae = window.ae || {}; window.ae.WowProfile = window.ae.WowProfile || {}; if(Aedu.User.current && Aedu.User.current.id === $viewedUser.id) { window.ae.WowProfile.current_user_edit = {}; new WowProfileEdit.EditUploadView({ el: '.js-edit-upload-button-wrapper', model: window.$current_user, }); new AddCoauthor.AddCoauthorsController(); } var userInfoView = new WowProfile.SocialRedesignUserInfo({ recaptcha_key: "6LdxlRMTAAAAADnu_zyLhLg0YF9uACwz78shpjJB" }); WowProfile.router = new WowProfile.Router({ userInfoView: userInfoView }); Backbone.history.start({ pushState: true, root: "/" + $viewedUser.page_name }); new WowProfile.UserWorksNav() }); </script> </div> <div class="bootstrap login"><div class="modal fade login-modal" id="login-modal"><div class="login-modal-dialog modal-dialog"><div class="modal-content"><div class="modal-header"><button class="close close" data-dismiss="modal" type="button"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button><h4 class="modal-title text-center"><strong>Log In</strong></h4></div><div class="modal-body"><div class="row"><div class="col-xs-10 col-xs-offset-1"><button class="btn btn-fb btn-lg btn-block btn-v-center-content" id="login-facebook-oauth-button"><svg style="float: left; width: 19px; line-height: 1em; margin-right: .3em;" aria-hidden="true" focusable="false" data-prefix="fab" data-icon="facebook-square" class="svg-inline--fa fa-facebook-square fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.25V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48z"></path></svg><small><strong>Log in</strong> with <strong>Facebook</strong></small></button><br /><button class="btn btn-google btn-lg btn-block btn-v-center-content" id="login-google-oauth-button"><svg style="float: left; width: 22px; line-height: 1em; margin-right: .3em;" aria-hidden="true" focusable="false" data-prefix="fab" data-icon="google-plus" class="svg-inline--fa fa-google-plus fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256,8C119.1,8,8,119.1,8,256S119.1,504,256,504,504,392.9,504,256,392.9,8,256,8ZM185.3,380a124,124,0,0,1,0-248c31.3,0,60.1,11,83,32.3l-33.6,32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9,0-77.2,35.5-77.2,78.1S142.3,334,185.3,334c32.6,0,64.9-19.1,70.1-53.3H185.3V238.1H302.2a109.2,109.2,0,0,1,1.9,20.7c0,70.8-47.5,121.2-118.8,121.2ZM415.5,273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5Z"></path></svg><small><strong>Log in</strong> with <strong>Google</strong></small></button><br /><style type="text/css">.sign-in-with-apple-button { width: 100%; height: 52px; border-radius: 3px; border: 1px solid black; cursor: pointer; } .sign-in-with-apple-button > div { margin: 0 auto; / This centers the Apple-rendered button horizontally }</style><script src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js" type="text/javascript"></script><div class="sign-in-with-apple-button" data-border="false" data-color="white" id="appleid-signin"><span ="Sign Up with Apple" class="u-fs11"></span></div><script>AppleID.auth.init({ clientId: 'edu.academia.applesignon', scope: 'name email', redirectURI: 'https://www.academia.edu/sessions', state: "1a5172f913d2834c7499fc325e4e25cbf3fc34b54c2768e1b66836c67b57264d", });</script><script>// Hacky way of checking if on fast loswp if (window.loswp == null) { (function() { const Google = window?.Aedu?.Auth?.OauthButton?.Login?.Google; const Facebook = window?.Aedu?.Auth?.OauthButton?.Login?.Facebook; if (Google) { new Google({ el: '#login-google-oauth-button', rememberMeCheckboxId: 'remember_me', track: null }); } if (Facebook) { new Facebook({ el: '#login-facebook-oauth-button', rememberMeCheckboxId: 'remember_me', track: null }); } })(); }</script></div></div></div><div class="modal-body"><div class="row"><div class="col-xs-10 col-xs-offset-1"><div class="hr-heading login-hr-heading"><span class="hr-heading-text">or</span></div></div></div></div><div class="modal-body"><div class="row"><div class="col-xs-10 col-xs-offset-1"><form class="js-login-form" action="https://www.academia.edu/sessions" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="RAI1P46feyMkObM1N_T4XVscRf7qa7PY75piUdIV97sYZY7nnWzCAIpg9-8M-leRN2nEdwDc3gwMaXt5EgiFEw" autocomplete="off" /><div class="form-group"><label class="control-label" for="login-modal-email-input" style="font-size: 14px;">Email</label><input class="form-control" id="login-modal-email-input" name="login" type="email" /></div><div class="form-group"><label class="control-label" for="login-modal-password-input" style="font-size: 14px;">Password</label><input class="form-control" id="login-modal-password-input" name="password" type="password" /></div><input type="hidden" name="post_login_redirect_url" id="post_login_redirect_url" value="https://uclouvain.academia.edu/PeterVanRoy" autocomplete="off" /><div class="checkbox"><label><input type="checkbox" name="remember_me" id="remember_me" value="1" checked="checked" /><small style="font-size: 12px; margin-top: 2px; display: inline-block;">Remember me on this computer</small></label></div><br><input type="submit" name="commit" value="Log In" class="btn btn-primary btn-block btn-lg js-login-submit" data-disable-with="Log In" /></br></form><script>typeof window?.Aedu?.recaptchaManagedForm === 'function' && window.Aedu.recaptchaManagedForm( document.querySelector('.js-login-form'), document.querySelector('.js-login-submit') );</script><small style="font-size: 12px;"><br />or <a data-target="#login-modal-reset-password-container" data-toggle="collapse" href="javascript:void(0)">reset password</a></small><div class="collapse" id="login-modal-reset-password-container"><br /><div class="well margin-0x"><form class="js-password-reset-form" action="https://www.academia.edu/reset_password" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="TfkMu2-37sCNrQ7oFcnUdaWbka_UcNv51L0BqwA_ef8RnrdjfERX4yP0SjIux3u5ye4QJj7Hti03ThiDwCILVw" autocomplete="off" /><p>Enter the email address you signed up with and we'll email you a reset link.</p><div class="form-group"><input class="form-control" name="email" type="email" /></div><script src="https://recaptcha.net/recaptcha/api.js" async defer></script> <script> var invisibleRecaptchaSubmit = function () { var closestForm = function (ele) { var curEle = ele.parentNode; while (curEle.nodeName !== 'FORM' && curEle.nodeName !== 'BODY'){ curEle = curEle.parentNode; } return curEle.nodeName === 'FORM' ? curEle : null }; var eles = document.getElementsByClassName('g-recaptcha'); if (eles.length > 0) { var form = closestForm(eles[0]); if (form) { form.submit(); } } }; </script> <input type="submit" data-sitekey="6Lf3KHUUAAAAACggoMpmGJdQDtiyrjVlvGJ6BbAj" data-callback="invisibleRecaptchaSubmit" class="g-recaptcha btn btn-primary btn-block" value="Email me a link" value=""/> </form></div></div><script> require.config({ waitSeconds: 90 })(["https://a.academia-assets.com/assets/collapse-45805421cf446ca5adf7aaa1935b08a3a8d1d9a6cc5d91a62a2a3a00b20b3e6a.js"], function() { // from javascript_helper.rb $("#login-modal-reset-password-container").on("shown.bs.collapse", function() { $(this).find("input[type=email]").focus(); }); }); </script> </div></div></div><div class="modal-footer"><div class="text-center"><small style="font-size: 12px;">Need an account? <a rel="nofollow" href="https://www.academia.edu/signup">Click here to sign up</a></small></div></div></div></div></div></div><script>// If we are on subdomain or non-bootstrapped page, redirect to login page instead of showing modal (function(){ if (typeof $ === 'undefined') return; var host = window.location.hostname; if ((host === $domain || host === "www."+$domain) && (typeof $().modal === 'function')) { $("#nav_log_in").click(function(e) { // Don't follow the link and open the modal e.preventDefault(); $("#login-modal").on('shown.bs.modal', function() { $(this).find("#login-modal-email-input").focus() }).modal('show'); }); } })()</script> <div class="bootstrap" id="footer"><div class="footer-content clearfix text-center padding-top-7x" style="width:100%;"><ul class="footer-links-secondary footer-links-wide list-inline margin-bottom-1x"><li><a href="https://www.academia.edu/about">About</a></li><li><a href="https://www.academia.edu/press">Press</a></li><li><a href="https://www.academia.edu/documents">Papers</a></li><li><a href="https://www.academia.edu/topics">Topics</a></li><li><a href="https://www.academia.edu/journals">Academia.edu Journals</a></li><li><a rel="nofollow" href="https://www.academia.edu/hiring"><svg style="width: 13px; height: 13px;" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="briefcase" class="svg-inline--fa fa-briefcase fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M320 336c0 8.84-7.16 16-16 16h-96c-8.84 0-16-7.16-16-16v-48H0v144c0 25.6 22.4 48 48 48h416c25.6 0 48-22.4 48-48V288H320v48zm144-208h-80V80c0-25.6-22.4-48-48-48H176c-25.6 0-48 22.4-48 48v48H48c-25.6 0-48 22.4-48 48v80h512v-80c0-25.6-22.4-48-48-48zm-144 0H192V96h128v32z"></path></svg> <strong>We're Hiring!</strong></a></li><li><a rel="nofollow" href="https://support.academia.edu/hc/en-us"><svg style="width: 12px; height: 12px;" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="question-circle" class="svg-inline--fa fa-question-circle fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"></path></svg> <strong>Help Center</strong></a></li></ul><ul class="footer-links-tertiary list-inline margin-bottom-1x"><li class="small">Find new research papers in:</li><li class="small"><a href="https://www.academia.edu/Documents/in/Physics">Physics</a></li><li class="small"><a href="https://www.academia.edu/Documents/in/Chemistry">Chemistry</a></li><li class="small"><a href="https://www.academia.edu/Documents/in/Biology">Biology</a></li><li class="small"><a href="https://www.academia.edu/Documents/in/Health_Sciences">Health Sciences</a></li><li class="small"><a href="https://www.academia.edu/Documents/in/Ecology">Ecology</a></li><li class="small"><a href="https://www.academia.edu/Documents/in/Earth_Sciences">Earth Sciences</a></li><li class="small"><a href="https://www.academia.edu/Documents/in/Cognitive_Science">Cognitive Science</a></li><li class="small"><a href="https://www.academia.edu/Documents/in/Mathematics">Mathematics</a></li><li class="small"><a href="https://www.academia.edu/Documents/in/Computer_Science">Computer Science</a></li></ul></div></div><div class="DesignSystem" id="credit" style="width:100%;"><ul class="u-pl0x footer-links-legal list-inline"><li><a rel="nofollow" href="https://www.academia.edu/terms">Terms</a></li><li><a rel="nofollow" href="https://www.academia.edu/privacy">Privacy</a></li><li><a rel="nofollow" href="https://www.academia.edu/copyright">Copyright</a></li><li>Academia ©2025</li></ul></div><script> //<![CDATA[ window.detect_gmtoffset = true; window.Academia && window.Academia.set_gmtoffset && Academia.set_gmtoffset('/gmtoffset'); //]]> </script> <div id='overlay_background'></div> <div id='bootstrap-modal-container' class='bootstrap'></div> <div id='ds-modal-container' class='bootstrap DesignSystem'></div> <div id='full-screen-modal'></div> </div> </body> </html>