Distributed programming : theory and practice (2013)