A pinboard by
Danilo Pianini

Post Doc, University of Bologna


Exploring a new paradigm to design and program distributed systems, with focus on space and time.

The Internet of Things (IoT) is ushering in a dramatic increase in the number and variety of networked objects. Personal smart devices, vehicular control systems, intelligent public displays, drones, electronic tags, and all types of sensors pervade our everyday working and living environments. Proximity-based interactions between neighboring devices play a major role in IoT visions, but are software development methods ready to support such complex and large-scale interactions in an open and ever-changing environment? Traditionally, the basic unit of computing has been an individual device, only incidentally connected to the physical world through inputs and outputs. This legacy continues to inform development tools and methodologies, causing many aspects of device interaction—efficient and reliable communication, robust coordination, composition of capabilities, search for appropriate cooperating peers, and so on—to become closely entangled in the implementation of distributed applications. When such applications grow in complexity, they tend to suffer from design problems, lack of modularity and reusability, deployment difficulties, and test and maintenance issues. Aggregate programming provides an alternative that dramatically simplifies the design, creation, and maintenance of complex IoT software systems. With this technique, the basic unit of computing is no longer a single device but instead a cooperating collection of devices: details of their behavior, position, and number are largely abstracted away, replaced with a space-filling computational environment. Hence, the IoT paradigm of many heterogeneous devices becomes less a concern and more an opportunity to increase the quality (for example, soundness, stability, and efficacy) of application services. This is accomplished through a layered approach to programming complex services that builds on foundational work on the composition of distributed systems to provide robust and adaptive coordination, ultimately providing engineers with a relatively simple programming API that still implicitly guarantees safety and resilience. Such a framework is particularly useful for large-scale scenarios with inadequate fixed network infrastructure, such as crowd management at large public gatherings. In these environments, opportunistic interactions between devices such as people’s smartphones can smoothly support services including crowd detection, dispersal advice, and crowd-aware navigation.