https://kendsnyder.com/reactivex-an-api-for-asynchronous-programming-with-observable-streams/