Re: Perlmonks MUD
by dragonchild (Archbishop) on May 27, 2004 at 15:54 UTC
|
You're talking more of a MUSH or a MOO vs. a MUD, especially the DikuMUD-derived versions. They're not that hard to build. Heck, it would probably take less than a week to get the basics up and running. The hardest part is the design of the database.
------
We are the carpenters and bricklayers of the Information Age.
Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose
I shouldn't have to say this, but any code, unless otherwise stated, is untested
| [reply] |
Re: Perlmonks MUD
by jepri (Parson) on May 27, 2004 at 17:54 UTC
|
Coolness. I enjoyed MOOs in the past ( I managed to hit a MOO at its heights of use and it was awesome).
I've always wanted to see some of the features of MOOs brought onto the web or similar technologies.
Apart from being great introductions to OO programming (you can literally see it happening in front of you), they are the only (simultaneous) joint code editing program I've seen . The idea of having multiple people editing the same code is something I've always wanted to play with a bit more.
Personally I don't feel attracted to the idea of browsing PM nodes by walking through rooms, but I do like the idea of being able to see what the monks around the monastary are doing - it would rock to have a list of monks currently looking at a node so we could kibbitz about nodes.
I once laid down the start of some code for a web-based moo in perl, but pretty much gave it up when I realised that there was no good way to allow people to run limited Perl5 code that they wrote inside the moo. The way Safe.pm works, it either limits programmers to trivial, useless code, or it allows people to gain full access easily (i.e. if you allow module loading, anyone can take control. if you don't, there's not much fun to be had)
____________________
Jeremy
I didn't believe in evil until I dated it.
| [reply] |
|
|
Most MOOs actually used some variant of LISP, sufficiently de-functionalized for general consumption. Perl is a very poor language for MOOs. Much better is write the server in Perl and provide a LISP-like language for the general programming.
------
We are the carpenters and bricklayers of the Information Age.
Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose
I shouldn't have to say this, but any code, unless otherwise stated, is untested
| [reply] |
|
|
Much better is write the server in Perl and provide a LISP-like language for the general programming.
Very true, but at the same time massively disappointing. Having to program OO lisp at the perlmonks MOO takes away 99% of the attraction for me.
Especially since people will then start asking LISP questions at the monastary and there'll be big flamewars about why the questions shouldn't be asked even though the MOO is part of PM.
Plus it leads to the inevitable question "why doesn't someone write the entire MOO in LISP"
____________________
Jeremy
I didn't believe in evil until I dated it.
| [reply] |
|
|
|
|
|
|
|
Perhaps, but think of it as an introduction to Perl for newbies. Learn by playing! I think it would be neat if you wanted to say place a 'security camera' in a room to watch people there, you would need to figure out how to code it yourself. You could also write your own special abilities, (I've been somewhat inspired by The Matrix Online (Check out the features page, I think it would be neat to implement something like that).
I'm game to help if anyone else is, but I don't know where to start.
our @item = reverse (114, 101, 107, 99, 97, 104, 32, 108,
114, 101, 80, 32, 114, 101, 104, 116, 111, 110, 97, 32, 116, 115, 117,
+ 74); local $my = reverse ")meti@\ ,rhc (pam tnirp";eval $my;
| [reply] [d/l] |
|
|
|
|
|
|
Most of the MOOs I've been on (and am still on...) use this bizarre OO MOO-C language that both terrifies and fascinates me. MUSHes have the not-quite-functional-but-damn-close softcode that I both love and hate, depending on the time of day. Of the two, I find MUSHes easier to code, but MOOs are just so much cooler. I used to do MUSH coding (various WoD mushes, mostly) and have submitted some patches to the TinyMUSH team.
| [reply] |
|
|
Re: Perlmonks MOO
by dragonchild (Archbishop) on May 27, 2004 at 18:50 UTC
|
A few more thoughts, after hearing some of the responses. In no particular order ...
There seem to be many different purposes put forward for the PerlmonksMoo.
- Trag wants to put forward a game
- jepri wants to put forward a tool to learn Perl
- Someone else mentioned the idea of kibbitzing with others viewing a given node
None of those ideas are bad, on their face. In fact, they're all quite cool. And, frankly, are very unrelated to PerlMonks.
Games of any sort can be written and based on anything. Most of us don't have time to work on a game, even one based on PerlMonks. I personally read PerlMonks at work. I have a number of CPAN modules that have languished for lack of time outside work. I know I'm not the only one.
Tools to learn Perl are neat. But, what does a MOO have to do with Perl? MOOs are object-oriented - they're almost the poster-child for OO. Perl's OO (and functional) support are not pure. All you'd be teaching someone is how to use funny characters and a non-standard method-calling syntax. That would just be frustrating.
Kibbitzing with others ... now, this would be very cool. Except, you're now talking a true client-server architecture. I wouldn't want to build that website. MUDs and MOOs are either based on telnet or have their own clients. Either you require Java, write a cilent in JavaScript, or use telnet. Uhh ... I'm not thrilled by any of those choices.
Basically, while the current format is rough around the edges, it's been working for many years. Until the HTTP protocol is supplanted by something with state, that format isn't really going to change much.
------
We are the carpenters and bricklayers of the Information Age.
Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose
I shouldn't have to say this, but any code, unless otherwise stated, is untested
| [reply] |
|
|
Someone else mentioned the idea of kibbitzing with others viewing a given node
Same guy as the prevous point. That's one I don't claim as my own idea though - I enjoyed kibitzing on the Internet Go Server.
At a basic level, it could just be inserted into each users homenode stats, e.g. have a "Now viewing node ###", or "Now editing node ####".
Or maybe even just have a node number appear next to a users name in the chatbox (not that there's any room for that sort of thing in the chatbox).
Tools to learn Perl are neat. But, what does a MOO have to do with Perl?
If the MOO language was perl, I'd answer "everything". If it wasn't, I'd answer "not much"
All you'd be teaching someone is how to use funny characters and a non-standard method-calling syntax.
Ideally the language would be real perl, not crippled perl.
Except, you're now talking a true client-server architecture. I wouldn't want to build that website. MUDs and MOOs are either based on telnet or have their own clients.
It's not too hard. The telnet thing was done because there was nothing else at the time. Current MOOs often have at least some webserver capability. A MOO written in proper MVC style should be easily adapted to any client, and this appears to have been the case.
*snipped*
I have a number of CPAN modules that have languished for lack of time outside work. I know I'm not the only one.
Aaagh! Guilt. I've got to get the next version of my mods up, and the new scripts and articles for my webpage, and arrange another .pm meeting, and... f**k it. What's on TV?
update: snipped and - I always feel that the best learning happens in games. Everything I've had fun doing, I got good at. Compare to some things I've been good at that were no fun at all, and I let them slip.
Fortunately (for me), perl is fun all on its own, but I could imagine having even more fun writing perl agents in a MOO and learning at the same time.
Hmm. What if we could work on CPAN modules in the MOO, and test them there?
____________________
Jeremy
I didn't believe in evil until I dated it.
| [reply] |
|
|
At a basic level, it could just be inserted into each users homenode stats, e.g. have a "Now viewing node ###", or "Now editing node ####".
Impossible. Or rather, difficult to determine when the user has completed such an action. If I view node #xxxxxx and then close my browser, how long until you decide that I've finished looking at the node? What happens when I've loaded multiple nodes simultaneously? I frequently have anywhere from 2-20 nodes opened in my tabbed browsing. Within the MOO/MUD, are you planning on magically cloning my character and placing him in all 20 'node rooms'? :) Now that'd be twisted.
| [reply] |
|
|
To use Perl as a MOO language, perhaps a dialect of Perl could work. We could add more OO support.
The Monk's time constraints are a problem, yes, and I cannot address it. But there are probably a few people like me (who have far, far too much free time on their hands) on the boards as well, who wouldn't mind working on this in their spare time.
If we go with Telnet for a client, it's not like we have to write the client ourselves right?. We could just use XML feeds to bring the nodes into the MOO, and there doesn't need to be complex changes made to the website (I think, please keep in mind I don't know much about this subject).
Trag
| [reply] |
Re: Perlmonks MOO
by flyingmoose (Priest) on May 27, 2004 at 20:39 UTC
|
But llamas and camels say ppppppbt, not moo!
| [reply] |
|
|
Clearly, we need some artistic soul to draw a picture of a cow with a hump, or a camel wearing cow-spotted short-hair hide.
(BTW, I'm working on a perlmoo right now. Yes, with real perl as the user-visible language. I'm planning on using Safe, and stub objects for everything... though allowing the user to cheat is not entirely unintended in all cases.)
Oh, and forking is allowed... anti-agent-smithisims will be in place, though.
| [reply] |
|
|
Agent Smithisms? .oO(The best thing about being me... There are so many me's)
Would you mind contributing to this theorbtwo? It sounds like your code would be a lot of help.
our @item = reverse (114, 101, 107, 99, 97, 104, 32, 108,
114, 101, 80, 32, 114, 101, 104, 116, 111, 110, 97, 32, 116, 115, 117,
+ 74); local $my = reverse ")meti@\ ,rhc (pam tnirp";eval $my;
| [reply] [d/l] |
|
|
|
|
What the heck. How does everyone feel about a Perlmonks PPPPPPBT?
our @item = reverse (114, 101, 107, 99, 97, 104, 32, 108,
114, 101, 80, 32, 114, 101, 104, 116, 111, 110, 97, 32, 116, 115, 117,
+ 74); local $my = reverse ")meti@\ ,rhc (pam tnirp";eval $my;
| [reply] [d/l] |
Re: Perlmonks MOO
by castaway (Parson) on May 30, 2004 at 09:37 UTC
|
| [reply] |
|
|
Thanks Castaway! Anyone who wants to help, feel free to contribute.
our @item = reverse (114, 101, 107, 99, 97, 104, 32, 108,
114, 101, 80, 32, 114, 101, 104, 116, 111, 110, 97, 32, 116, 115, 117,
+ 74); local $my = reverse ")meti@\ ,rhc (pam tnirp";eval $my;
| [reply] [d/l] |
Re: Perlmonks MOO
by BUU (Prior) on May 28, 2004 at 07:25 UTC
|
Some thoughts on the security aspect. I know theres a *nix function called "chroot", which lets you redefine the root of a process. I assume theres also someway to limit the cpu / memory usage of a process via similar means? What if the parent script forked a child that would just execute the user submitted code, but execute it only inside this chroot and under process restrictions? This way you don't have to worry about messing about with Safe or any such ops, and you can even give the user a small amount of control over his own file system, with the ability to create tmp files and such. | [reply] |
|
|
Hmm, internal filesystems within the MOO. That could make things interesting...
our @item = reverse (114, 101, 107, 99, 97, 104, 32, 108,
114, 101, 80, 32, 114, 101, 104, 116, 111, 110, 97, 32, 116, 115, 117,
+ 74); local $my = reverse ")meti@\ ,rhc (pam tnirp";eval $my;
| [reply] [d/l] |