Distributed Systems Crash Course