PhD student at Vrije Universiteit Brussel. Conducting research in reactive programming language design for the Internet of Things. MSc in Computer Science at VUB. Excited about Unix, language design, and good music.
📮 📱
I am conducting research to find the best programming paradigm for data intensive Internet of Things applications. Currently I am working on my runtime for IoT devices, called Potato. Potato views an IoT system as a network of datastreams, and offers the programmer a toolset to easily compose, consume, and manipulate these streams.
Out of interest I decided to obtain a master's degree in management.
In my thesis: »Combining the Actor model with Software Transactional Memory«, I extensively studied the viability of integrating the actor model with software transactional memory and vice versa. Created proof of concept implementation in Clojure. Created operational semantics.
Teaching lab sessions, as well as giving exams.
Teaching lab sessions, as well as giving exams.
Teaching lab sessions, as well as giving exams.
Built a real estate website using the Umbraco CMS (.NET), and connected that to the legacy back-end.
Assemble and repair desktop computers.
Gave a short technical talk by invitation on the Elixir/OTP framework.
»slides«
On the requirements for the implementation of practical session types in contemporary languages.
»slides«
Contemporary IoT systems are challenging to develop, deploy, and maintain. This is because of their ever-increasing scale, dynamic network topologies, heterogeneity and resource constraints of the involved devices, and failures that may occur as a result of these characteristics. Existing approaches are either not at the right level of abstraction, require developers to learn specialized languages, or miss certain key features to address all these challenges in a uniform manner. In this paper we leverage reactive programming and code mobility to support the entire life-cycle of large-scale IoT systems. Our approach is based on existing programming technologies and offers simple and composable abstractions to developers. We implemented our approach in a middleware called Potato and used it to develop and deploy an IoT application on a Raspberry Pi cluster. We found that using Potato reduces much of the accidental complexity associated with developing and deploying IoT systems, resulting in clean and maintainable programs.
»pdf«
Cyber-Physical Systems (CPS) are comprised of a network of devices that vary widely in complexity, ranging from simple sensors to autonomous robots. Traditionally, controlling and sensing these devices happens through API communication, in either push or pull-based fashion. We argue that the computational power of these devices is converging to the point where they can do autonomous computations. This allows application programmers to run programs locally on the sensors, thereby reducing the communication and workload of more central command and control entities. This work introduces the Potato framework that aims to make programming CPS systems intuitively easy and fast. Potato is based on three essential mechanisms: failure handling by means of leasing, distribution by means of first-class reactive programs, and intentional retroactive designation of the network by means of capabilities and dynamic properties. In this paper we focus on the reactive capabilities of our framework. Potato enables programmers to create and deploy first-class reactive programs on CPS devices at run time, abstracting away from the API approach. Each node in the network is equipped with a minimal actor-based middleware that can execute first-class reactive programs. We have implemented Potato as a library in Elixir and have used it to implement several small examples.
»pdf«
The Internet of Things (IoT) requires us to rethink the way distributed event-driven applications are programmed. IoT applications differ from traditional distributed applications on a number of points. First, they are comprised of an order of magnitude more devices that operate within a dynamic network. Second, failure in large dynamic networks is no longer an exceptional state but a given and thus needs to be part of the core semantics when programming such networks. Third, the hardware in these networks is not homogeneous so that a common software stack is impossible. We believe that contemporary event-driven languages do not offer appropriate abstractions to write IoT applications. We propose a novel computational model for programming IoT applications by identifying four key abstractions for designating network nodes and handle failures that facilitate writing large-scale IoT applications.
»pdf«