Please read it online and explore the repository.
tl;dr: A non-trivial project in Erlang accompanied by commentary. It demonstrates various methods for building production systems with Erlang/OTP.
ErlMUD is a networked Multi-User Dungeon (MUD) game system. The purpose of the project is to demonstrate various Erlang styles commonly found in the wild by detailing the evolution of this project as it passes through them. ErlMUD is a sort of Rosetta Stone for Erlang projects. It starts with an informally specified concept system, moves through some common forms of raw Erlang and basic OTP, and ends with a maintainable system based on OTP.
The goal is to cover — by direct exploration and encounter in code — at least a few of the common pitfalls, "boilerplate code" situations, useful abstractions and techniques which have congealed over the years into idiomatic raw Erlang and idiomatic OTP. A secondary goal is to demonstrate that raw Erlang is not the same thing as OTP.
The final evolutions of the code are production-style OTP systems, intended to fill in the gaps left by other Erlang learning resources. Quite often newcomers to Erlang focus intensely on early learning materials, mastering the bits and pieces of the language, basic OTP concepts, details of functional programming and the Erlang library, and at the end of this arduous road are left wondering how to put what they have learned into action on a real production system. For most folks the first production system they encounter is either at work, or is their own project which began life innocuously on GitHub or SourceForge but one day gained a strong following of users and was suddenly expected to be production quality. In either case, most Erlangers undergo a painful climb up a second, even steeper, learning curve than the one they overcame in learning the language to begin with.
With any luck, examination of the ErlMUD commentary and the various evolutions of the ErlMUD code will demonstrate concrete answers to at least some of the questions intermediate Erlang users often find themselves pondering and demonstrate solutions to common situations that make newcomers scratch their heads. While examination of the code may provide quick answers to some how-to questions, the commentary is necessary to explain the tradeoffs made in various places and to explain why things are the way they are.
Another nobody on the net. The details of my life are inconsequential.
At the expense of violating DRY... Read it online and explore the repository.