Stream about (functional) **reactive programming** techniques. Related combined stream: https://thoughtstreams.io/combined/functional-reactive-programming/ ---- Coursera course **"Principles of Reactive Programming"** (since 2013) by Martin Odersky (Scala programming language), Erik Meijer (Reactive Extensions library) and Roland Kuhn (Akka concurrency toolkit). - Week 1: Review of Principles of Functional Programming (1h:30) - Week 2: Functional programming and mutable state (2h:00). - Week 3: Futures (1h:30). - Week 4: Reactive stream processing (1h:30). - Week 5: Actors (2h:00). - Week 6: Supervision (1h:30). - Week 7: Conversation Patterns (2h:00). https://www.coursera.org/course/reactive ---- > The goal of Rx is **to coordinate and orchestrate event-based and asynchronous computations** such as low-latency sensor streams, Twitter and social media status updates, SMS messages, GPS coordinates, mouse moves and other UI events, Web sockets, and high-latency calls to Web services using standard object-oriented programming languages such as Java, C#, or Visual Basic. via: Erik Meijer (2012): "Your Mouse is a Database", http://queue.acm.org/detail.cfm?id=2169076 ---- > When it comes to programming, my least favorite thing to work on is GUI back-ends. **Traditional GUI programming involves a lot of mutable variables which represent the current state of your program**; if at any point you want to modify part of the program, very often you have to take all of the potential states of your program into account. [...] > >Reactive Programming aims to solve a lot of these issues. In a nutshell, all user-interaction with the UI can be represented as events; you can write code that responds to events by updating some state and UI. This isn't a new concept: anyone who has written applications in .NET is probably familiar with events. **Reactive Programming takes events to the next level by allowing you to generate new events from existing ones**: you can take an event that's fired when a Button is clicked, and make a new event that gets fired only when the Button was clicked with the left mouse button. You can take two events and combine them into a single event that's fired when either original event is fired. You can turn an event into a new event that returns the last two results of the original event. This alone can cut down on the complexity of a GUI implementation, but eventually you will still be manipulating state. via: Stephen Elliott (2014): "Tutorial: Functional Reactive Programming in F# and WPF (Part 1)", http://steellworks.blogspot.com/2014/03/tutorial-functional-reactive.html ---- > Wikipedia describes reactive programming as **“a programming paradigm oriented around data flows and the propagation of change”**. This description already gets to the core of what reactivity in the context of programming means. Now, the additional attribute “functional” in FRP as opposed to just reactive programming can [...] simply refer to **a “programming paradigm for reactive programming using the building blocks of functional programming”** [...]. We also note that FRP libraries differ from “non-functional” reactive libraries in that the former almost always **provide functional combinators to manipulate reactive constructs** and strive to be more declarative in general. > >[...] We sum up that in this thesis we understand FRP as **a paradigm around data flows, change propagation and time-varying values or event-streams using functional building blocks**. via: Eugen Kiss (2014): "Comparison of Object-Oriented and Functional Programming for GUI Development", http://www.eugenkiss.com/projects/thesis.pdf ---- > Having seen both a naive use of ReactFX and a more reasonable, we take the opportunity to formulate an advice for profitably using ReactFX. One should try to **minimize the use of subscribe as this function is inherently side-effectful**. Ideally, subscribe should only be used at the boundary between ReactFX and non-ReactFX code. via: Eugen Kiss (2014): "Comparison of Object-Oriented and Functional Programming for GUI Development", http://www.eugenkiss.com/projects/thesis.pdf