If You Can Get To Buffalo

Image from CityPaper, © 2013

There’s a play on in Baltimore this week by Trish Harnetiaux called “If You Can Get To Buffalo” about Julian Dibbell’s 1990s Village Voice LambdaMOO article, “A Rape in Cyberspace”:

http://en.wikipedia.org/wiki/A_Rape_in_Cyberspace

You can read reviews here:

http://citypaper.com/arts/stage/what-a-tangled-web-1.1492872

http://www.dcmetrotheaterarts.com/2013/05/23/if-you-can-get-to-buffalo-an-exploration-of-a-rape-in-cyberspace-by-amanda-gunther2/

There’s an interview with the playwright here:

http://www.baltimorefishbowl.com/stories/new-baltimore-play-tackles-totally-weird-1990s-cyber-culture/

And the theatre company’s page about the production is here:

http://www.theacmecorporation.org/content/current-shows

This isn’t the first dramatic presentation of LambdaMOO, another example is this short film scripted from chat logs:

http://www.youtube.com/watch?v=pqR_xM_50vk

Dibbell’s article was expanded into a book. It is a sometimes salacious but ultimately insightful examination of life on the MOO. You can read it here:

http://www.lulu.com/shop/julian-dibbell/my-tiny-life-crime-and-passion-in-a-virtual-world/ebook/product-17492539.html

A more comprehensive insight into the operation, history and geography of LambaMOO is “Yib’s Guide To MOOing”, available here:

http://www.yibco.com

And a more ethnographic study of MOOing with lots of interesting historical and cultural details is Lynne Cherny’s “Conversation and Community: Chat in a Virtual World”, which you’ll have to buy a copy of:

http://cslipublications.stanford.edu/site/1575861542.shtml

LambdaMOO is still here and is well worth exploring. You can install a Telnet client on your computer or mobile device (there’s one already on MacOS X) and telnet to:

lambda.moo.mud.org 8888

Creating A Morph Using Sick’s Sick Player Class

Once you’ve set your LambdaMOO character’s description using @describe me as, set its gender using @gender and set Sick’s Sick Player Class as your character’s parent using @chparent me to #49900 you can add morphs to them.

A morph is an alternate identity for your character. It bundles together an alias, description and other properties describing a character so you can save them and then switch to them quickly later.

Before creating any morphs you should save your character’s initial state by typing:

@save-morph

Then each time you change your character description or any morphs you should type it again.

The command for creating a morph is:

@create-morph <morph-gender> <morph-name> as <morph-description>

where gender is one of the standard LambdaMOO genders and morph-description is a description of the character’s appearance contained in double quotes.

You can then switch to the new morph by typing:

@morph <morph-name>

And you can switch back to your character’s original name and description by typing:

@morph <character-name>

Then whatever your character’s current morph you can create further morphs using @create-morph.

There’s much more you can do with morphs. The documentation for morphing can be found using the help command:

help morphing

 

MOO Memeing
@verb me:lick this none none
@program me:lick

if (this.location != player.location)
lickfail = “You must be in the same location as %t to lick %[dpo].”;
player:tell($string_utils:pronoun_sub(lickfail));
elseif (this == player)
lick = “You lick yourself. Mmm! You taste just like raisins.”;
player:tell($string_utils:pronoun_sub(lick));
licks = “%N %<licks> %r. Mmm! %[dpsc] %<d:tastes> just like raisins.”;
player.location:announce_all_but({player}, $string_utils:pronoun_sub(licks));
else
lick = “You lick %t. Mmm! %[dpsc] %<d:tastes> just like raisins.”;
player:tell($string_utils:pronoun_sub(lick));
licks = “%N %<licks> %t. Mmm! %[dpsc] %<d:tastes> just like raisins.”;
but = {this, player};
player.location:announce_all_but(but, $string_utils:pronoun_sub(licks));
licked = “%N %<licks> you. Mmm! You taste just like raisins.”;
this:tell($string_utils:pronoun_sub(licked));
endif

.
Connecting To LambdaMOO Persistently

It’s easy to connect to LambdaMOO whenever you wish from mobile devices or desktop computers, but you can miss out on what’s happening when you’re not online. If you have a desktop computer that you keep permanently online you can keep a MOO client open on it, but then you cannot connect on the move.

If you have a shell account on a server (a server account that allows you to run programs on from the command line rather than just serve web pages) you can run a MOO client there and connect to it from your mobile devices or other computers. This combines the advantages of an always-on connection to the MOO with the advantages of being able to connect wherever you may be.

There are two ways of creating accessible persistent connections, each with its own advantages and disadvantages:

  1. You can run TinyFugue in a GNU Screen session, which allows you to connect securely using an SSH client. What you gain in security you may lose in spell checking on mobile devices.
  2. Alternatively you can run Mooproxy, which integrates better with dedicated MOO clients but still uses the insecure Telnet protocol to communicate with your server.

TinyFugue In A GNU Screen Session

TinyFugue can be run in an ssh session on a server, but when you disconnect it will exit. To create a persistent TinyFugue session you can run it in GNU Screen. When you run Screen, it opens a new command line terminal that will continue running even when you disconnect from the server. And anything that you run within Screen will keep running as well. You can then reconnect to Screen the next time you connect to the server, and your TinyFugue session will still be running.

Setting up SSH connections to a server is outside the scope of this article. SSH clients are available for every desktop and mobile operating system. Install one, and find out how to set up public key authentication from it to your server.

To install TinyFugue and Screen on a GNU/Linux server you will need to be able to run commands as an administrator. You install them using the command-line package manager on the server by typing something like:

sudo apt-get install tf5 screen

or

sudo yum install tf5 screen

Next, set up the .tfrc file in your home directory:

echo "/world lambdamoo lambda.moo.mud.org Guest" >> ~/.tfrc

or, if you have a registered character:

echo "/world lambdamoo lambda.moo.mud.org USERNAME PASSWORD" >> ~/.tfrc

You only need to do that once.

Then you can start a Screen session with tinyfugue running in it by typing:

screen tf5

You don’t need to quit the MOO or TinyFugue when you wish to leave, just close the SSH connection.

Then when you reconnect, type:

screen -DRRU

This will reconnect to your previous screen session. If for some reason the session has ended, for example if the server has been rebooted, you can restart TinyFugue once Screen starts by typing:

tf5

When you reconnect to Screen from a different device your new connection will inherit the TinyFugue session any other devices will lose access to it.

Mooproxy

Mooproxy is a buffering network proxy for MOO connections. It runs on your server keeping a persistent connection open to the MOO, and then you connect your MOO client to it rather than to the MOO.

To install it type:

sudo apt-get install mooproxy

or:

sudo yum install mooproxy

To configure it, generate a hash of your connection command for LambdaMOO:

mooproxy --md5crypt
connect CHARACTER PASSWORD

and make a note of the string that mooproxy prints in return.

Then create the file:

~/.mooproxy/worlds/lambdamoo

(you may need to create the ~/.mooproxy/worlds directory using:
mkdir -p ~/.mooproxy/worlds/ )

and enter the following into it:

# The port to listen to on *your* server
listenport = 8899
# The hash of your connection command, for security
auth_md5hash = "THE HASH OF YOUR CONNECTION COMMAND FROM moocode --md5hash"
# The actual MOO server address
host = "lambda.moo.mud.org"
# Tha actual MOO server port
port = 8888
# Connect to the MOO automatically on start
autologin = true
# Reconnect to the MOO if the connection is lost
autoreconnect = true
# Lines starting with this character will be interpreted as command to mooproxy
commandstring = "/"
# Mooproxy should send this many lines of history to you when you connect
context_on_connect = 100

To set it running in the background as a daemon, type:

mooproxy -w lambdamoo

This will start mooproxy using the settings from the world file ~/.mooproxy/worlds/lambdamoo .

To connect to LambdaMOO, set your MOO client to connect to ,ooproxy on your server. Use your character name and password for LambdaMOO , but rather than using LambdaMOO’s host name and port, use the host name and port of the server that you are running mooproxy on.

As with screen/TinyFugue, if you connect to mooproxy from a different device your new connection will inherit the mooproxy session any other devices will lose access to it.

To debug your mooproxy connection, you can check its logs at:

~/.mooproxy/logs/lambdamoo/

The most common errors are to not enter the correct connection string when running mooproxy --md5crypt, or to not open the port that you have set mooproxy to use in the firewall.

Connecting To LambdaMOO With Editor Clients

Some more advanced MOO clients go beyond simply enabling you to connect to the MOO. They also support editing of the content of the MOO using their own interface rather than the MOO’s built-in facilities. This is often more convenient and flexible than using the MOO’s built in text editor. These clients are all cross-platform.

RMOO

https://github.com/toddsundsted/rmoo

RMOO is a MOO client for the GNU Emacs text editor. It will run anywhere Emacs runs. RMOO allows you to edit notes, mail and code in separate Emacs buffers and then send them back to the MOO.

Emacs is the ultimate customisable programming environment, so implementing a MOO client in it gives you access to a wide range of useful tools to use when writing and editing for the MOO.

TkMOO

http://www.awns.com/tkMOO-light/

TkMOO is a MOO client implemented in the TCL scripting language. It will run anywhere the “wish” TCL/Tk interpreter is installed.

Note that you may need to edit the code to refer to a more modern version of wish before it will run.

Connecting To LambdaMOO From Desktop And Laptop Computers

LambdaMOO uses the Telnet protocol but modern operating systems don’t tend to include a Telnet client by default. Using a dedicated MOO client offers a much better experience, so we’ll concentrate on finding and installing one of those instead.

GNU/Linux

GnomeMUD is a MOO client for GNU/Linux. It is usually available through your package manager as gnome-mud.

Use the following World Settings for LambdaMOO:

Host: lambda.moo.mud.org

Port: 8888

Logon: connect Guest

or, once you register a character

Logon: connect CHARACTER PASSWORD

Replace “CHARACTER” with the name of your character, and “PASSWORD” with your password.

Windows

Pueblo is a MOO client for Windows. You can download it here.

Use the following World Settings for LambdaMOO:

Host: lambda.moo.mud.org

Port: 8888

Username: Guest

Leave the password blank.

or, once you register a character

Username: CHARACTER

Password: PASSWORD

Replace “CHARACTER” with the name of your character, and “PASSWORD” with your password.

Mac OS X

Savitar is a MOO client for Mac OS X. You can download it here.

Use the following World Settings for LambdaMOO:

Host Name: lambda.moo.mud.org

Host Port: 8888

Issue these commands at startup: connect Guest

or, once you register a character

Issue these commands at startup: connect CHARACTER PASSWORD

Replace “CHARACTER” with the name of your character, and “PASSWORD” with your password.

Cross-Platform GUI client

Mudlet is a graphical user interface MOO client that is available for GNU/Linux, MacOS X and Windows. You can download it here.

Use the following Connect settings for LambdaMOO:

Server Address: lambda.moo.mud.org

Port: 8888

Then click the connect button and once the welcome message from LambdaMOO finishes printing type :

    connect Guest

or, once you register a character:

    connect CHARACTER PASSWORD

Replace “CHARACTER” with the name of your character, and “PASSWORD” with your password.

Cross-Platform Command Line Client

TinyFugue 5 is a command-line MOO client that runs on MacOS X and Windows as well as on UNIX platforms such as GNU/Linux. It is usually available through your package manager as “tf5”.

TinyFugue uses a command-line terminal window, so open a terminal and type:

    tf5

then when TinyFugue has loaded, type:

    /connect lambda.moo.mud.org 8888

and once the welcome message from LambdaMOO finishes printing, type :

    connect Guest

or, once you register a character:

    connect CHARACTER PASSWORD

Replace “CHARACTER” with the name of your character, and “PASSWORD” with your password.

Connecting To LambdaMOO From Tablets And Smartphones

You can connect to LambdaMOO from smart phones and tablets as easily as from desktop computers, if not more so. Then you can access the classic text-based virtual reality anywhere you have a wireless or cell network signal.

To do so, you will need to install and configure an app capable of communicating with LambdaMOO and then open a connection to it.

Android

MuClient is a dedicated MOO client for Android. You can install it here.

Use the following configuration:

Address: lambda.moo.mud.org

Port: 8888

Login: connect Guest

or, once you have a character:

Login: connect CHARACTER PASSWORD

Blackberry

BBSSDH is a Telnet client for Blackberry devices. You can download it here.

Use the following configuration:

Host: lambda.moo.mud.org

Port: 8888

Then when you connect, type:

connect Guest

or, once you have a character:

connect CHARACTER PASSWORD

iOS (iPhone and iPad)

MudMaster is a MOO client for iOS. You can purchase it via Apple’s app store here.

Use the following configuration:

Host: lambda.moo.mud.org

Port: 8888

Type: Telnet

Connection Command: connect Guest

or, once you have a character:

Connection Command: connect CHARACTER PASSWORD