Course IN4389: Reactive Programming
Programming Reactive Extensions and LINQ
Reactive programming is a programming paradigm oriented around data flows and the propagation of change. In this course, we will explore how to coordinate and orchestrate event-based and asynchronous computations such as sensor streams, Twitter and social media status updates, SMS messages, GPS coordinates, mouse moves and other UI events, web-sockets, high-latency calls to web-services, etc.
Big data is one of the hottest buzzwords in the IT industry these days. Big data is data that does not fit inside conventional relational databases because it is either too big, it moves too fast, or it is not rectangular. Reactive programming involves manipulating flows of such big data.
If we classify the design space of big data across the three dimensions of Volume: small…big, Velocity: pull…push, and Variety: foreign/primary-key…key-value, we get the following “Big Data Cube” of possibilities. Each of the eight corners of the Big Data Cube corresponds to a (well-known) database technology. For example the traditional RDMS is at the top-left corner with coordinates (small, pull, fk/pk), Hadoop-based systems such as HBase are on the front-left corner with coordinates (big, pull, fk/pk). If we move from the top plane to the bottom plane, the data model changes from rows and primary keys to objects and pointers. On the bottom-left corner at coordinates (small, pull, k/v) we find traditional O/R mapping solutions such as LINQ to SQL, Hibernate, etc.
If we move to the front we get LINQ to Objects with coordinates (big, pull, k/v) and if we move to the right we change from batch processing to streaming or real-time data. There, on the bottom right at coordinates (big, push, k/v), we find the Reactive Extensions (Rx) or as it is sometimes called LINQ to Events, which is the topic of our course.
The goal of Rx is to coordinate and orchestrate event-based and asynchronous computations such as sensor streams, Twitter and social media status updates, SMS messages, GPS coordinates, mouse moves and other UI events, web-sockets, high-latency calls to web-services, etc. using the LINQ standard query operators.
In the first half of the course we will explore regular LINQ to Objects and LINQ to SQL over pull-based collections and explain how we can get from LINQ to Objects to Rx via dualization, that is by “reversing all the arrows”. We will show how to bridge between Rx and traditional callback-based event programming, as well as the new C# await syntax and Task-based asynchronous APIs, and how to develop UI programs by writing queries over streams of events. In the second part of the course we will show how Rx is implemented, and construct a simple Rx-LINQ provider for a real-time social media source. We conclude this course by using Rx and LINQ to create a Coding4Fun-like application to solve a real-world problem of your choice.
The grade for this course will be based on (1) group participation; (2) labwork; (3) paper written; (4) final presentation of paper and labwork.
The course's recommended book is Introduction to Rx
(available online for free).
More information about Rx is available at the Rx MSDN website
, on Codeplex
and on GitHub
Other literature includes:
Examples of Reactive Programming use in the real world include
The course is taught by prof. dr. Erik Meijer
, who is affiliated with Microsoft (Redmond, USA), in combination with a part time appointment at Delft University of Technology. Contact person for this course at TU Delft is prof. dr. Arie van Deursen.
The practical assignments will be supervised by Georgios Gousios
The audience of the course consists of MSc CS students with a strong interest in software engineering, cloud programming, and data manipulation.
The maximum number of students for this course is 15. Early registration (via Blackboard) is recommended if you want to participate.
The course will take place during the weeks starting on March 25 and April 1. The dates for the course are:
- Wednesday 27 Mar, 10:30-12:30 (HB09.150)
- Thursday 28 Mar, 08:30-10:30 (HB09.150)
- Wednesday 3 Apr, 10:30-12:30 (HB01.170)
- Thursday 4 Apr, 08:30-10:30 (HB01.170)
The schedule of the course 2012 consisted of 4 lectures in February, each 2*2 hour:
- Wednesday February 8 and Wednesday February 15, 10:45-12:30, HB09.130 (tentative)
- Thursday February 9 and Thursday February 16, 08:45-10:30, HB09.130 (tentative)
Furthermore, various on line sessions were planned to discuss the labwork and student papers: the dates for these were set together with the students. Due to the 9 hour time difference with Redmond, USA, these took place in the (early) evening.
For an impression of the course in 2012, have a look at Arie van Deursen
's blogpost Teaching Reactive Programming
See also the IN4389 course description (2012/2013)
in the on line TU Delft study guide.
For further information, contact Erik Meijer
or Arie van Deursen