I started this year with a deep sense of morosity. A lot of things haven't been going my way lately and it only seems to get worse over time. I function best when I know I'm being productive and building and creating things. For a time I took up cooking as a hobby, but I find myself exhausted from it now. Maybe in time I'll return to it.

At work, we're currently shifting with the tides of technology. Many of our processes and platforms are out of date, and so were my skills. I had found a comfortable niche and didn't grow. Much of what I'm dealing with now is uncharted territory for me. I've found that the easiest way to learn a new technology is to jump right in and build a game out of it. And since the technology they're pushing at work is Node, I decided to make a Node MUD. Who knows if this is something that I'll complete, but I felt like I needed to begin writing about technical matters again before I went nuts with personal matters.

So this blog will explore the design and evolution of NOTAMUD as it transitions from being Not a MUD to an actual MUD.

Node is an... interesting technology. It's almost always the wrong choice to make. I'm not being closed-minded, that's the literal truth. But it's got some very interesting ideas to it that have caught other more established frameworks by surprise. Many web frameworks start off with the opinion that they should provide you with everything *and* the kitchen sink. And if you're building an Enterprise web application, then that assumption is usually correct. Some frameworks go a little too far with their abstractions and end up being a really bad idea in the long run (see: ASP.NET Web Forms), but in general, you know an Enterprise site is going to need a large number of basic components. Authentication, Authorization, View Engine, Routing Engine, Cookie Parsers, Query String Parsers, etc.

Node starts with the philosophy: You don't need any of that. I can serve web pages 100x faster than anyone else because I don't introduce boilerplate.

And they're correct. But by the time you add all of that technology back in again when you need it, the performance of Node collapses and has no advantage anymore.

There is of course a class of applications that Node does well with in which traditional web frameworks do not: non-website-like-websites.

So with that in mind, I thought that in order to try to learn how to accept Node, I'd build a MUD in it. And I wouldn't start with all of this OOP ceremony like I traditionally used to, either. Instead I'm going 100% agile. Pick a small goal, introduce it into the codebase, refactor until it works, et voila, you have a game. So we'll see how this experiment works.

Additionally I'd like to add that Javascript/Typescript introduce some really interesting type concepts to programming. Concepts which are generally very bad in an enterprise development environment, end up becoming bonuses when you're trying to accomplish the goals that I'm trying to accomplish here.

Back in 2002 I published my 2nd book, "MUD Game Programming". I built it in C++ because at the time, that was what you built games in. The 2nd MUD in the book, "BetterMUD", was essentially a failed experiment though. If I had the chance, I'd go back and rewrite that entire thing. And in fact I've tried multiple times.

I once attempted a MUD called "MargarineMUD: I can't believe it's not Better!" as a sequel. This didn't get too far. It was in C#, and I tried making it so that you could dynamically compile C# scripts while the game was still running, but .NET's AppDomain system wasn't flexible enough for what I wanted, and the project ultimately failed.

A few years ago after Microsoft rewrote C# for the Roslyn update, I revisited the ideas and tried to make KatanaMUD. I was more successful, but ultimately failed again due to a lack of commitment and other things going on in my life.

This time, I'm going all-in on TypeScript. Strong typing for the things that need it, dynamic typing for the things that don't. Compiled to JavaScript. Node means I can theoretically run the same code on the browser and the server, which is a powerful story if you can make it happen. I've already found a number of ways in which that assumption is flawed, but that's a story for another day.

Anyway, the 0.1 milestone of the game is done, and users can enter, chat, and move around the world.

You can find the source code here: https://github.com/RonPenton/NotaMUD

And you can find the public server here: http://ec2-52-32-243-132.us-west-2.compute.amazonaws.com/game