Evennia - a Python-Based Mu* Server
-
@Griatch said:
[paraphrased] Yes.
OMG, so Evennia can get malware?!
@Volund said:
Q) Can you run MUSHcode on Evennia?
A) No, but Python is objectively more powerful and widely supported than MUSHcode.Thanks for thinking for me, dad.
Q) Can you import nWoD cgen from one game to another's?
A) Yes, although not necessarily the way you're thinking. In MUSHcode, you'd create an object, give it the right permissions, ensure the right attributes were admin-locked, make some rooms for chargen and call it good. maybe.This is not entirely true. That it's true at all is the fault of the lack of imagination of Mu* coders. I don't entirely blame them, considering, but none of this has needed to be true for many long years.
My WoD Cgen is fully transportable with no need to mess around with anything more than making sure you have some sensible functions, like header() and footer(). It assumes some others, but makes places where this is easily fixed. The server-side config does not need touched at all.
It's also room-free. It's a global system because once the Master Room became a thing (god, how long ago?), there was no reason for Chargen Rooms. None. At all. Ever. (This is not 100% true, but let's call it 98% true.) We did it this way because we've always done it this way.
Continuing the last question: Python is in fact BETTER than MUSHcode for this
This we can agree on.
-
I think this should speak for itself.
http://fubarp.crabdance.com:8000/sheet/2314/120
Yeah, it's pulling directly from my WIP Storyteller code. Hail Exalted 2.5e.
-
OMG, so Evennia can get malware?!
Huh, where did that come from?
But resources already encoded in python for the games that are extant are going to be slim to none, whereas there are tons and tons of things for MU out there already. Glen Morse's page comes to mind, and has a crapton of things in it. Thenomain has things on his own thing he's shared with all of us. MUX2 comes with SGP. Etc.
For sure, Evennia has fewer MU*-specific resources in our library. We don't have 20 (30?) years to fall back on, alas. We do have the advantage of free access to the huge (and now we are really talking huge) Python ecosystem though.
.
Griatch -
@Griatch said:
OMG, so Evennia can get malware?!
Huh, where did that come from?
All the ad-based malware that's going around.
It came from dry humor, mixing ignorance with bad information. Sorry, I thought the excessive "OMG!"ing made it clear that the seriousness was nil.
We do have the advantage of free access to the huge (and now we are really talking huge) Python ecosystem though.
One thing that I think you have a very strong handle on, Griatch, that I don't think @acharles does is that it doesn't matter how big a repository of knowledge and information is if you are introducing it to a culture that knows nothing about it.
One of the hardest parts of me self-learning programming languages that are library-based is figuring out which one of the billions and billions of libraries do the one very specific tiny thing I want to do. All you need is 20(30?) years of experience to know, obviously.
Example: The one functioning bit of code I wanted to do in Python was rife with confusing explanation of what an MD5 check does, when all I wanted to do was to generate the check without the ton of work that the help files were implying I had to do. I turned to Ruby and immediately groked it.
I'm no longer harshing on "just learn Python and Git, duh" because it's becoming clear to all involved that this isn't just a simple cultural change. The growing pains are going to happen; I don't think anyone needs to—and almost no one has—reacted to this as a negative. Most of it is on our side and is mainly, "I ... I don't ... ow ... brain hurts ...."
By the way, the positive reaction here is fantastic. I'm ecstatic that Volund's excitement is justified.
I think it's clearer to say that you (and your contemporaries) have a huge body of established, stable, tested work to draw from, which is 100% Balls-To-The-Wall Awesome. This will make learning for the rest of us easier, but I would like to stress the '-er' on that just a bit, one last time.
I do wish I had the time, between maintaining the insanely complex code I have already created for WoD and the full-time job that does not allow me any desk-time, to dive in with both feet. Some day.
-
@Thenomain said:
Which is like saying, "Learning to swim is already non-trivial, so you might as well compete professionally."
Yeah, Charles, it's mainly you who I'm accusing of talking over the heads of your audience.
I'm mostly trying to say that if someone has a goal and the cost of learning something non-trivial is worth the benefit of achieving the goal, then they'll spend the cost. The cost of learning mushcode is similar to the cost of learning git and python, at least to the extent required to implement a multidescer or tarot deck. I'm not attempting to compare two things which are vastly different than each other, in terms of time requirements.
-
@Thenomain said:
I'm no longer harshing on "just learn Python and Git, duh"
I never did suggest that anyone should "just learn python and git, duh".
-
@Thenomain said:
@Griatch said:
OMG, so Evennia can get malware?!
Huh, where did that come from?
All the ad-based malware that's going around.
It came from dry humor, mixing ignorance with bad information. Sorry, I thought the excessive "OMG!"ing made it clear that the seriousness was nil.
Heh, sorry, sarcasm and irony can be hard to catch online sometimes. I blame me not being a native English speaker.
One of the hardest parts of me self-learning programming languages that are library-based is figuring out which one of the billions and billions of libraries do the one very specific tiny thing I want to do. All you need is 20(30?) years of experience to know, obviously.
Yes, in the case of Python, it's one of those things that are very easy to learn to use productively, yet takes a lot longer time to master. Knowing how to dive into Python's standard library is an important skill. Google and Stack Overflow are my constant friends! It's surprising how often someone else has asked the exact same question (although in a completely different context) and there is a finished Python example to refer to.
I'm no longer harshing on "just learn Python and Git, duh" because it's becoming clear to all involved that this isn't just a simple cultural change. The growing pains are going to happen; I don't think anyone needs to—and almost no one has—reacted to this as a negative. Most of it is on our side and is mainly, "I ... I don't ... ow ... brain hurts ...."
By the way, the positive reaction here is fantastic. I'm ecstatic that Volund's excitement is justified.
I should point out that I (being the only "official" Evennia representative here) am not here to "lure anyone away" though. If people are interested in testing Evennia I'm of course happy but as @Derp points out, existing code bases work well (and has for a long time), with people being used to their functionality. They also do some things out of the box that Evennia does not do - I have no doubt people will continue doing cool stuff with them in the foreseeable future.
As for @Volund, he is rushing ahead with his WoD implementation. New stuff is literally happening every day.I think it's clearer to say that you (and your contemporaries) have a huge body of established, stable, tested work to draw from, which is 100% Balls-To-The-Wall Awesome. This will make learning for the rest of us easier, but I would like to stress the '-er' on that just a bit, one last time.
We have worked hard to try to make the Evennia framework easy and efficient to work with. No doubt there is more to do. The experience of people coming to us from MU* softcode has helped us quite a lot: their input has helped shape our system's various connection modes, just to do pick one example. They also do things a bit differently and tend to approach coding paradigms in new and sometimes interesting ways.
.
Griatch -
Your install video should be place front and centre on your quickguide! It helped me get over the hump of not having all the right packages pre-installed before following the steps.
Anyways, now to start fucking around with it while I learn some python!
-
@SG said:
Your install video should be place front and centre on your quickguide! It helped me get over the hump of not having all the right packages pre-installed before following the steps.
Anyways, now to start fucking around with it while I learn some python!
Whitenoise will be happy to hear his video is appreciated! He has so far done two videos in his "EvCast" series, one on installing Evennia, the other on basic Python concepts. Here is the Youtube playlist
.
Griatch -
Bit late to the party here but I wanted to chime in with another perspective.
AresMUSH is a MU server I'm developing that's similar to Evennia. It also does not support Softcode, nor are there plans to ever support it.
Why? Because Ares is not intending to replace existing MU servers, but to provide an alternative.
If you're happy with softcode (or are willing to learn), and/or allowing players to tinker with code in-game is a necessity for your game, then Penn/Tiny will meet your needs just fine.
But if you're like me, and would rather gouge your eyes out than look at another line of MU softcode, then an alternative like Ares or Evennia might be a good choice for you. (Ares uses Ruby, FWIW).
Or if you're not a coder, have no desire to be a coder, and just want something that supports basic RP-MUSH features out of the box with minimal configuration - Ares might be a good choice for you too.
Evennia is a much broader platform meant to support a wide variety of server types with different needs. Ares has a far narrower focus for lightly-coded RP MUSHes.
They're just tools. Pick the right tool for your job.
-
Ares sounds cool, I was not aware of it before! I didn't find any obvious info on how to code with it on your website - Evennia is coded with external Python modules, do you maybe do something similar (but in Ruby)?
.
Griatch -
@Griatch Yes, Ares calls them Plugins, and basically everything except the core connection and command dispatching infrastructure is a Plugin. Movement, poses, multi-descer, channels, chargen - they're all Plugins. Here's some sample code for the silly little Cookies (+nom) plugin.
Documenting how to use it is the biggest chunk remaining on the backlog.
It's built on the idea that coding will either be done through the server shell (telnet/ssh into the server itself) or using a traditional version control/development paradigm like GitHub.
I'm not saying that's superior to being able to tweak code live on the game command line. It's just a different model, with both advantages and disadvantages.
-
Aye, documentation is a big chunk of the work. Our documentation wiki covers 200 pages and some 40% of our source-code is documentation - and still there could be more of it. We can't explain how to do basic Python tasks for example - we have to limit our scope somewhere. But for people coming from no programming experience, or from knowing only softcode, those are really the bits which are the most needed ... Having an active dev support channel/forum has helped a lot here, since it allows point-targeting these more individual, custom info-needs. Whitenoise's Evennia videos have also helped a bit since one of them is a Python primer.
I imagine you face the exact same issues with Ruby, even with a more narrow target audience.
.
Griatch -
Double-post, but I was writing from my phone and couldn't check out your code example. Peeked at the ruby code now. I like the concept of splitting up all these subsystems in a plugin framework. Evennia does this too, but maybe in a less explicit manner, using config files to offer overloading of default systems and commands with your own modules.
I'd be interested in hearing about how you handle code updating when a source file changes on an already running server with players on it. We do this via players connecting to a proxy, meaning the server (behind the proxy) can be fully reloaded without anyone disconnecting. Maybe Ruby's hot-reload capabilities are different though, I don't know Ruby enough to tell, so it would be interesting to hear your approach to it.
.
Griatch -
@Griatch Yeah, I think the documentation picture is pretty similar. It's a lot to cover.
The plugins can be hot-swapped thanks to Ruby's dynamic capabilities, but changing the core engine requires a game restart. Hopefully that should be rare.
-
@faraday said:
The plugins can be hot-swapped thanks to Ruby's dynamic capabilities, but changing the core engine requires a game restart. Hopefully that should be rare.
The plugins can be hot-swapped? So what happens when you replace code that is already instanced somewhere in memory, potentially with other dependencies in other objects? Can you reload those modules into memory and be sure there are no conflicts? Or are all plugins meant to be used "without memory" of previous calls, so to speak?
I ask because we can hot-swap Python modules too, it's just that in a more complex system it can be nigh impossible for a reloader to make sure all in-memory instances can hold state while reloading to what may be different functionality. We tried this for a long time. Eventually we found that reloading completely behind a proxy solved all such problems for us (and allows you to do
@reload
from in-game to cleanly see all code changes).
.
Griatch -
It's fun watching people "solve" problems that have been solved since the '90s.
If you want a tip on how to do hot-swapping of code, take a look at Erlang and its OTP library. You'll probably be able to kit-bash something that kinda-sorta works based on that model.
-
-
@Griatch said:
The plugins can be hot-swapped? So what happens when you replace code that is already instanced somewhere in memory, potentially with other dependencies in other objects? Can you reload those modules into memory and be sure there are no conflicts? Or are all plugins meant to be used "without memory" of previous calls, so to speak?
In Ruby, you can unload and load classes while they are still being used. Any old object instances remain in memory. It requires some care to always write code that correctly handles possible nil instance variables.
-
Ah, the eternal null check. Tony Hoare's "billion dollar mistake" made manifest.
A properly-architected system does those null checks for you behind the scenes so you don't have to do it yourself constantly with the attendant risk of failure when (not if) you forget one.