Author Topic: LDMUD  (Read 1951 times)

Offline quixadhal

  • BFF
  • ***
  • Posts: 474
    • View Profile
    • Shadowlord.org
LDMUD
« on: September 17, 2012, 04:43:54 PM »
Hey, I dunno if you guys have ever poked at ldmud, but it's another LpMUD driver that's been considered the more-or-less direct descendant to the Amylaar LpMUD 3.2, which was also a direct descendant of the original LpMUD 2.4.5.

Anyways, I decided to go see if anything had changed, and found this.

So, while the official site is still up and running, there's now also a github site which has new stuff on it.

Anyone foolish enough to consider coding a new mudlib from scratch, or trying to port some ancient beast from 3.2 or older, might be interested. :)

Offline quixadhal

  • BFF
  • ***
  • Posts: 474
    • View Profile
    • Shadowlord.org
Re: LDMUD
« Reply #1 on: September 17, 2012, 07:38:47 PM »
Oh, and before I forget, here's the simple way to grab all of it at once.

Code: [Select]

git clone https://github.com/ldmud/ldmud.git ldmud
git clone https://github.com/ldmud/ldlib.git ldlib
git clone https://github.com/ldmud/ldmud-extensions.git ldmud-extensions
git clone https://github.com/ldmud/proftpd-mod_mud.git proftpd-mod_mud

CVSROOT=:pserver:anonymous@proftp.cvs.sourceforge.net:2401/cvsroot/proftp cvs login
cvs -d :pserver:anonymous@proftp.cvs.sourceforge.net:2401/cvsroot/proftp -z3 co proftpd
mv proftpd proftpd-cvs

CVSROOT=:pserver:anonymous@pdd.cvs.sourceforge.net:/cvsroot/pdd cvs login
cvs -d :pserver:anonymous@pdd.cvs.sourceforge.net:/cvsroot/pdd -z3 co Userguide
mv Userguide proftpd-userguide-cvs

I renamed the ones in cvs so I'd remember to type "cvs update" instead of "git pull".

Offline Camlorn

  • Friend
  • **
  • Posts: 67
    • View Profile
Re: LDMUD
« Reply #2 on: September 17, 2012, 10:11:58 PM »
Wow.  Great documentation in that thing.  For those who know me, I'm not easily impressed by documentation.

    I can (indirectly) vouch for driver stability (in the past, as a player), as lost souls uses it.  Lost souls is really, really complicated behind-the-scenes (they've got their own special messaging protocol so that you can refer to things by whether the player knows what they are, and that's only the surface).

    To be honest, I thought development was dead on it.

    Appears to have various database support, including sqlite, and I've seen a few mentions of irc support.

    Is anyone besides Lost Souls using this?  I'd love to know how well it actually works, etc, in practice. For all I know lost souls has done some driver fixing, but I don't think so; they may be an older version.

    It's moved well beyond even the mudos dialect of lpc, in some ways; it's got full lambda closures and you can actually have more than one value under a key in the mapping (acording to something I read--this may not actually work).  I've read the documentation but never used it.

    I'd be interested to know how this stands up to FluffOS (no verbs is a point against it) in both features and stability.

    Maybe all the separate people all working on lpc drivers should all work together, and we could get the uber-fdriver with dgd persistance and all the good points from everything.  Yes, I know that's not likely.

Offline chaos

  • BFF
  • ***
  • Posts: 274
  • Job, school, social life, sleep. Pick 2.5.
    • View Profile
    • Lost Souls
Re: LDMUD
« Reply #3 on: September 18, 2012, 08:14:34 AM »
We're on the old, now-unmaintained 3.2 branch, which is super stable, as you observed.  The main stability problem with it is that the LPC compiler goes mildly but fatally insane if you address more than 2 gig of memory; most people will not encounter this issue.  Last time I tried the 3.3 branch, it wasn't stable compiled to 64-bit; this may have changed.

LDMud's lambdas and multivalue mappings are just Amylaar's lambdas and multivalue mappings, and it's debatable whether the latter in particular is a feature.  My impression is that LDMud is generally not trying to innovate in language structure so much as do things like build out support that makes established core capabilities usable in practice without ridiculous workarounds, as in the case of adding the remove_input_to() and load_name() efuns.

Offline Camlorn

  • Friend
  • **
  • Posts: 67
    • View Profile
Re: LDMUD
« Reply #4 on: September 18, 2012, 01:23:30 PM »
I've had a few times I've wanted multivalue mappings, as they avoid certain overheads in specific situations.  The key word here being "specific", and you can do the same thing with arrays.

    To be honest, I know nothing about amylaar, except that most drivers extend from it to an extent.  Or something.  But I'm big on functional programming, so lambda support is a big plus (FluffOS has this too, but not quite to the same extent. sort of).

    Not sure how you "address more than 2 gig of memory" in lpc, actually.  I imagine you mean use?  Last I checked, lpc doesn't have pointers.  For muds "using" more than 2 gig of memory, I can only think of a couple of examples; any of my project ideas, if carried to completion, might.

    The thing posted by quixadhal says that 3.5 is supposed to be 64-bit, iirc.  But who knows how far they got on it.

    I'm monopolizing the thread and am thus going to stop.  I should probably open a  "driver debate" thread at some point, however; I've got a project idea and kind of wonder what would be best for it (even if I never actually get around to coding it).

Offline Holyavenger

  • Friend
  • **
  • Posts: 58
    • View Profile
Re: LDMUD
« Reply #5 on: October 18, 2012, 05:18:15 PM »
I think Camlorn, what needs to happen to resurrect these drivers is for some new app to tap into the old technology.
I'm kind of the crazy one here, but I was theorizing that if somehow there was a facebook interface to an LPMud Game the old drivers would get new life. There is a developer who mud place is called Tauros. It uses an lpmud interface, but he never finished it. The admin named Daryth, who I have know for probably 15 years now figured the same thing

As for the great mudos v ldmud, I know there are a few big muds out there that have used LDmud so its battle tested still.  The mudos family is not as popular. As for the verb thing, I dont know enough to speak too deep about it, but cant one just take the verb stuff and export it out to LDMUD as a package?

I ran an older mud called Dragonfire. It still exists today, and runs LDMUD.  I started compiling LDmud 3.5 and got it to work with the old 2.4.5 compat lib which really needs to be modernized.

Agian, muds could rock if we somehow get them modernize. Text has no graphics and in an odd way its a plus.

Offline Camlorn

  • Friend
  • **
  • Posts: 67
    • View Profile
Re: LDMUD
« Reply #6 on: October 19, 2012, 06:55:57 PM »
Well, sort of.   Keep in mind that this is only my opinion.

    Firstly, have a look at epitaph.  Drakkos is doing a lot of that kind of thing--phpbb and wordpress are integrated with it at the moment--and it's more than possible to do.  But this isn't about the driver, this is about the programmer on top of the driver.  The driver is not responsible for writing the facebook interface, the lpc programmer is responsible for writing the facebook interface, etc.  The driver is only an interpretter that hides scary things like telnet negociations; the newest drivers don't even hide that anymore.

    Verbs are arcane and mysterious and no one really seems to understand them anymore; they're a core part of the FluffOS driver, nowadays, and I wouldn't be able to pull it out and give it to ldmud.  Mudlibs can do everything verbs an, however, including implementing a verb-like interface; for a serious project, this is probably not as big a deal as I think (discworld doesn't use verbs, but you wouldn't know it).  Someone else could probably port verbs to ldmud, but in all honesty, FluffOS code uses a lot of things that most c programmers aren't even taught nowadays.  Most programmers aren't even taught the arcaneness that is void*, or why one might want to manage memory instead of letting the operating system do it for you, and FluffOS is...well, I wouldn't call it an exemplary piece of c code.  I can't understand it, not really, even if others can.

    As for lpc...and I start a flamewar here:

    Lpc is very, very appealing for writing muds.  There are a variety of reasons for this: it hides some of the difficult stuff, you can easily do in-place upgrading without reboot, projects like dgd give full persistence, most of the most advanced mud technology is written in lpc.

    But.  Lpc as a language has limits.  I mean, look at something like scala: functional and imperative programming rolled into one, if I need to interface with c libraries I can, if I need to get an implementation of a graph data structure I can, there's libraries for just about everything already written.  I lose some of the mud-centric features, but I gain a lot.  I would possibly argue that c++ is better than lpc, at least in some cases here, but I am slowly beginning to believe that the jvm almost certainly is.  Lpc doesn't have a good optimizer--some of the drivers don't even fold constant expressions--and really enjoys doing wierd things with types.  You do have type checking, and all, but no one uses it, not really.  If you're going to write from scratch, that is an empty mudlib directory, do it with a programming language that provides more modern conveniences.  Writing telnet negociations and object serialization isn't exactly easy, but the jvm (the technology I buy into at the moment, if you haven't noticed) can even continue to optimize your program while it's running, compiling portions of it for the native platform and inlining code.  You have to reboot to update (maybe. I think coffeemud might have a way to do warmboots.), but there's IDEs and libraries for everything under the sun and optimizers and a whole bunch of tools for everything.  In scala, there's even libraries to distribute your program across multiple computers: I could put the worldmap on one and the combat code on another, if I wanted (note: this is not something you should do as a mud programmer. it would be nigh on impossible to maintain).

    Lpc has it's benefits, and I might still use it for a mud project, but if I'm going to start from scratch, I hesitate to do so.  I think the next killer app will be written in another programming language, not lpc, unless it turns out that epitaph is (epitaph has a good chance of being a killer app. We shall see.).  I don't count lpc out--it's still viable--but I don't think lpc offers anything that can't be gained elsewhere with a bit of work; to me, the other more modern technologies have a lot more benefits and such, and I'd only use a driver that offers something I can't get elsewhere.  Thus, my dgd is impressive opinions.  Ldmud does have interesting things and lost souls can run on top of it, so I would consider using it if I wrote a mud; unfortunately, most of my mud projects would hit the limitations of lpc drivers eventually.  Mostly, because most of them don't assume tried-and-true mechanics, and I do have some ardneh-like tendencies about gameplay (I would not use celestial bodies to impact pottery systems. I'm not that bad. But I would abandon the idea of spells being these things you pull out of thin air with a cast command, and I don't see why players can't be allowed to burn down midgaard. With real flames.).  My projects would work on top of lpc, but it'd take more work to get them doing so easily, or so I think.

    And, yes, my opinions have changed slightly since this thread was last posted in...

Offline quixadhal

  • BFF
  • ***
  • Posts: 474
    • View Profile
    • Shadowlord.org
Re: LDMUD
« Reply #7 on: October 20, 2012, 04:50:08 PM »
You have to know your goal AND your audience, before you can start talking about how good or bad LPC is, compared to anything else. :)

Java has good and bad things, like everything else.  One of the bad things (IMHO) is that it doesn't support multiple inheritance.  Sure, you can design around that, but cribbing interfaces just for the sake of making the compiler happy isn't something I enjoy, nor is trying to take something that's very simple and easy to do with inheritance, and refactoring it into dozens of smaller bits to avoid multiple-inheritance.

You can interface any C library out there from LPC, provided you are willing to take the time and effort required to learn how the driver you chose implements extensions, and write the glue code to get the data in and out of LPC.  It is easier in perl/python/ruby/scala/etc?  Probably.  Is it enough easier to be worth writing your own driver?  That's for you to decide.

Let me also say this.  If you want to make a game that works like an LPMUD in any other language, you don't just pick up the language and start writing your game.  You have to write ANOTHER language inside it.

For example, let's say I wanted to make a Ruby MUD that worked like an LPMUD.  First, you'd want to write the "driver" in ruby, and get it all setup to handle sockets, file I/O, and whatever else you need.  THEN, you need to have a ruby interpreter INSIDE your ruby program, to run sandboxed ruby code that will be your mudlib.

Here's the thing.... it sounds easy, but in practice you need to write a sandbox system where each ruby object can run arbitrary ruby code, and can access some number of global data objects that live in a higher level ruby space (but still not all the way up to the driver).  IE: the driver cares about things like sockets and files, your "mudlib" cares about events, your "sword" object cares about some statistics and about the object wielding it, but perhaps not about the room you're in, or the weather, or anything else handled by the mudlib.

So, long example short, you need a way to arbitrate data access between objects, but one that doesn't make them co-dependant.  If you dest your sword, you don't want to have to recompile the player that was wielding it.  Likewise, if you dest the player, you want the sword itself to remain in-game and fall to the ground.

Can that be done?  Of course.  LPC is, afterall, a giant C program.  You could rewrite the driver in ruby/python/perl and the mudlib shouldn't be able to tell the difference.  Can you make an LPC-like language?  Again, sure... Lars was a smart guy.  You might be just as smart.  Is it worth the effort of redesigning a new language interpreter that does what you NEED in a text game, rather than forcing a general-purpose language to do the job, or forcing yourself to adapt to LPC?  Again, that's up to you... :)

Offline Camlorn

  • Friend
  • **
  • Posts: 67
    • View Profile
Re: LDMUD
« Reply #8 on: October 20, 2012, 05:20:36 PM »
Well, as I said, I don't expect everyone to agree.  And, at the risk of discrediting myself, this argument is right on both sides (or so I think. If someone can prove to me that I'm wrong, I'll admit it).

    Java does not have multiple inheritance.  I do not program in java because of this.  Scala does have a form of multiple inheritance through traits--interfaces with implementations, sort of--so that makes it better.  The dynamic languages have a whole lot more fun stuff beyond that.  There's nothing in the jvm saying "If you can find a way to work around me you can't", so even though java bytecode doesn't (at last check...it's been a while) support multiple inheritance, there's still other ways to do it.  I mean, technically, x86 assembly doesn't support classes, and we've got c++.

    The point here wasn't to make an lpc-like game, though I could see why it seems that way.  The point was that if you're going to write something from scratch, maybe pick an industry standard, etc.

    Again, my argument on libraries.  I don't have to invent a programming language: I could go grab lua or javascript or (god forbid) forth, etc.  In the case of lua, limiting access to the outside world is easy enough, anyway--you only get access to what I give you--and a lot of other preexisting language libraries have this feature.  I can get sandboxing without having to write it myself, if I want, with a bit of looking.

    And, on the note of security, well...let's just say, I wouldn't give my builders and such nearly as much access as they'd get on an lpc game.  My outlook on security is this: you are either a content generator or a programmer.  If you are a content generator, you shouldn't be able to code, at least not so that you can touch the outside world, and if you graduate to programmer/coder, you've proven to me that unrestricted access is acceptible for you.  That, and keep backups. Lots of backups.  So we've got two sandbox modes: you can't access anything, using the jvm example again, that is outside the mymud.* namespaces, everything in the mymud.* namespaces accounts for it's own security (like some mudlibs), and there'd probably be an ingame scripting language (javascript or lua, probably).  Finally, be ready to amend/modify the security/sandbox system at a moment's notice.

    Yes this is naive.  You will notice I don't have a mud that is open.

    Regardless.  Either I have to deal with sandboxing or I have to deal with trying to get access to facebook or weather satellites or mysql (I know this exists already) from lpc, possibly doing driver hacking.  Those two tasks sound about the same in turms of difficulty to me; in the latter case, however, it can be put off until you actually need it.

    And again, there are reasons I might use lpc.  It is a nice language, it just lacks a lot of modern things that make programming simple; if I were working from scratch, I wouldn't, not anymore, but lpc does currently have the state-of-the-art mudding technology built on top of it.  For me, the reason I don't like lpc so much for my own potential projects is that I can't leverage all the cool highly esoteric libraries that do neet things and might as well be black boxes unless you can understand scholarly journals...

    And, for that reason, I think the next big mudding thing won't be on top of lpc.  Lpc doesn't work on iphones, it's not really made to act as a replacement for things like apache, etc.  Again, just my views.

Offline quixadhal

  • BFF
  • ***
  • Posts: 474
    • View Profile
    • Shadowlord.org
Re: LDMUD
« Reply #9 on: October 20, 2012, 11:19:23 PM »
Just to touch on a couple of points...

While there's nothing saying you NEED to make a distinct seperation between driver and mudlib, if you want your game to be flexible and easily changed without downtime, without having to run a test port, and without having a single error cascade into the entire game collapsing, having your mudlib sandboxed is the way to go.  LPMUD's do that.  DikuMUD's do not.  Others may vary.

While backups are always important, they shouldn't be a substitute for security.  If you lock everything down to the point that "content generators" can't do anything but fill in the blank on some template, you just shot yourself in the foot.  You'll end up with thousands of generic and boring rooms which don't *DO* anything of interest, because the builders can't *DO* anything without the bottleneck of some admin's approval and some coder's time.

Where LPMUD's win is that any builder can code anything he or she can imagine.  It can be tested in their own area.  It can crash.  It can have exploits.  It can do all kinds of things it shouldn't do, but until an admin approves it and moves it into the production area of the game, it doesn't affect players.  That means the builders who spend the time to learn can make really elaborate content with multi-stage traps, quests, monsters that work together as teams, and all kinds of things that require a "coder" to do in a DikuMUD (or any other MUD that lacks this kind of seperation).

As for using an existing language... have you tried?  I have yet to see a language that makes it trivial to sandbox itself within itself.  They all provide ways to sandbox them from C/C++, and most provide ways to evaluate expressions from inside themselves, but only in very limited ways.  If you use one language for the driver and another for the mudlib, why bother?  Now anyone who wants to work on both has to learn both languages.  Unless you're only looking for help from people who know the magic combination you chose, you've lost the benefit of picking a "mainstream" language entirely.

LPC doesn't run on a cell phone, true.  It could, but nobody has bothered to compile it for that environment.  Why would they?  Why would you need your client to be written in LPC?  It can be, but it seems like a poor choice when all the client does is talk over a socket to the server and display results.  It's trivial to push LPC data structures out as JSON, and that makes it incredibly easy to talk to anything else out there.

Before writing Yet Another New MUD driver, have you considered just picking one of the existing LPC drivers and writing a mudlib from scratch?  It's a lot less work.  The compiler is already there and working, as is the socket handler and I/O hooks.  Yes, you do have to play within the rules set out by that driver in terms of what objects need to exist, and how to talk via the API... but really.  Look at the "lil" mudlib for FluffOS.

The next "big thing" for MUDs, if any, will be someone finally abandoning TELNET and forcing the use of a proper client that uses structured data packets to talk to the server, and displays things in ways that make sense in 2012.  People running existing muds won't do it, because they fear losing the tiny group of players they have.  Admins working on existing codebases won't do it, because it's too big of a change for what they see as minimal gain.

But, that doesn't mean existing stuff has to be tossed out entirely and magically rebuilt from nothing.  FluffOS is perfectly capable of talking in JSON, even from LPC without any changes to the driver.  The concepts of "rooms" and all that are pretty much all in the mudlib as well, so any or all of that can easily be rebuilt to use structured data... but you'd probably want to start from a minimal mudlib as a guide and built up, since most existing mudlibs are designed around doing ALL the display work on the server end.

Offline Camlorn

  • Friend
  • **
  • Posts: 67
    • View Profile
Re: LDMUD
« Reply #10 on: October 21, 2012, 11:01:25 AM »
I didn't mean for lpc to run on a smartphone.  I meant that there's libraries for protocols and such already for talking to clients on smartphones and such from the server in other languages than lpc.  Your points are valid; I'm not going to disagree with you on them. As I said, there's two sides to this argument.

    Personally, I don't want to see a non-telnet mud, not unless the author(s) are willing to attempt to make it blind accessible; most don't seem to care.  If muds move away from telnet, there'll be less reason to care, because there'll be a whole new audience.  Which locks me and other blind players out.  At the moment, clients that run in web browsers can't be made accessible for realtime games, at least not through any method I'm aware of; the screen readers can't be told to automatically read new stuff.

    I'm not sure about the whole sandboxing language x inside of language x, and I really think that the whole thing depends on what language x is.  If I recall, python (as an example) has methods for doing this already; given the popularity of java in the web environment, it probably has them as well.

    Learning new programming languages isn't hard, depending on the programming language.  C++/lua is a common combination and for most builders there's no need to go learn about the esoteric horror that is lua's equivalent for classes.

    When I say builders shouldn't be able to touch the outside world, I mean that they shouldn't be able to touch things outside the mud.  A builder shouldn't be able to create and delete files and the like.  I didn't mean that I'd give them absolutely no programming access.

    I really don't see a need to argue this further; this isn't a one-side-is-right issue, it's preferences and opinions.

    And, I think I'll go look into making a blind-accessible html5 client now.  Not to actually code one, just to see if there's enough to make it possible.  I don't think this is possible, yet, which is sad, and I don't think screen reader developers care enough to add the stuff that would make it doable.

Offline quixadhal

  • BFF
  • ***
  • Posts: 474
    • View Profile
    • Shadowlord.org
Re: LDMUD
« Reply #11 on: October 21, 2012, 01:15:19 PM »
In the case of blind players, have you considered writing your own client that doesn't rely on these dodgy screen-readers, which seem to not do their job all that well, and have all kinds of limitations for using anything written in the last decade?

If your MUD sent structured data (JSON, XML, whatever) instead of plain text streams, you could just write a client which used voice synthesis directly to present the actual useful data, without having to dodge extra markup, and without having to rely on some screen scraping software that apparently can't handle standard windows programming techniques.

Just a thought.

Offline Nilrin

  • Friend
  • **
  • Posts: 63
    • View Profile
Re: LDMUD
« Reply #12 on: October 21, 2012, 11:20:17 PM »
Don't the zMUD / CMUD clients satisfy text to speech requirements via plug-ins? Perhaps I'm not understanding the complexity required, but from what I've seen, you can get it to read what you want, when you want.

Offline Camlorn

  • Friend
  • **
  • Posts: 67
    • View Profile
Re: LDMUD
« Reply #13 on: October 23, 2012, 05:57:02 PM »
Current telnet clients work. Zmud may or may not, I don't think it does; mushclient is the main client used by blind players (well, there's vipmud, but that thing has a number of broken bits, costs money, and was written by someone who has evidently never played a mud).

Writing a client "that doesn't rely on screen readers" is not simple, but not impossible either; to do so, one must duplicate all functionality of a screen reader.

    Obviously, there's a misconception about screen readers and standard windows programming practices.  It's not the fault of the screen reader that there *aren't* standards.  I did some looking--in the future, blind accessible clients can be made with aria live regions--but for now, meh, as that's still a draft.

    It's like this.  If there is a standard protocol, i.e. telnet, writing something that makes it blind accessible is, if not trivial, at least doable.  Writing a client without using a screen reader requires rather a lot of work--I really think you should go look, for example, at how web browsing works through screen readers.  You seem to think that screen readers should be able to understand human intent.

    Dynamic content delivered through a web browser is only recently becoming popular enough to gain a standard.  There are standards for web accessibility, but no one follows them.  It's maybe the last year or so that something (wai-aria live regions) has been introduced that makes this possible, and like the rest of the internet it's going to be at least another five years before that gets adopted.  Screen readers don't know that I'm playing a game; for all the screen reader knows, I'm working on a document in a word processor or something.  If it monitored everything for updates and then did it's best, a number of things that shouldn't happen start happening in other places: reading dynamic ads over and over, reading the 4000 or so previous lines from the mud...

    If a number of things happen, I'll embrace the change to web clients; as it stands, every mud has it's own client and it's own protocol.  If someone standardizes the protocol and a significant number of muds agree to use it, writing a client specifically for the blind becomes an option.  If not, well, it comes down to the mud authors; I know from past experience that most mud authors won't bother to make the required changes, and in most cases exposing telnet is easier.  This is mostly through lack of skill and/or lack of understanding why the changes requested would actually be better for the blind, and then there's the argument of not enough gain.  My best estimate is somewhere between 5 and 10 percent of the mudding world is blind, and that percent doesn't have anywhere else to go; world of warcraft is literally not an option.  Even then, most inaccessible muds are still not willing to put forth the effort--minimal in many cases--to be accessible.

    Before saying that screen readers are lame, etc, go try learning one, and come to understand the capabilities.  It allows one to use a computer without a mouse and without a screen; to do so there's a whole bunch of capabilities in there.  It doesn't simply read from top to bottom, and abandoning screen readers and writing a client that doesn't need one abandons a lot, and I do mean a lot, of functionality.  Then your users have to learn a completely new interface: it's not like a mouse, where it's obvious what you have to do; to learn a program that is "self-voicing", one must memorize all the keystrokes beforehand.

    The current limitation is this: screen readers can't automatically assume things are dynamic.  If your application exposes the information properly, I can use it.  But if it is in realtime, the screen reader doesn't know what to do.  The real limitation is only with things that draw controls themselves instead of allowing the operating system to do it--in such cases, nothing can be done--but that's getting better as time advances.

    The issue is not current mud clients. I know how to make a client accessible--I am blind and I do play muds, after all.

    But, until something is done to prove to me that web-based json clients that do all this fancy stuff are accessible, I'm not going to embrace it.  They can be, but no one has yet bothered to make an effort.

    And here's the final issue.  It takes years to learn a screen reader, and 99% of the training you can get doesn't teach you how to use a computer as a blind person.  Instead, you're taught how to be a parrot: press these five keystrokes to open the e-mail client, press these 5 keystrokes to open word.  The focus isn't on learning the computer as a sighted person does, it's on being able to work in the workplace.  Most blind mudders are this type of player, nowadays, and half the time a friend set up the client.  As a mouse-user with a screen, there's idiomes you learn in a basic computing class that aren't taught to blind people: why opening this program is the same as opening that program, etc.  Having an accessible web client is only half the issue here: half the users barely know how to navigate the internet; for example, I made a worldmap that used an html table for lost souls, and so far I'm the only blind player who can use it, simply because no one else actually knows what a table represents, if you follow.  Blind people aren't taught how the computer works, they're taught how to do common tasks so they can go make a living.  The average blind computer user will have trouble making a word document.

And yes, I know and agree with the counter-argument to that last part, but it does need saying.

    Go look on mudconnect. I just posted something a few days ago about aria live regions and the issues with using them to make an accessible client; I'm still hoping someone will reply and say they're willing to try, but meh...if you're curious about the issues, go look at that.  I'll probably cross-post it at some point.  As I said in my last post, I needed to go look to see if there was anything new, and aria live regions are.  The problem is getting mud developers to label their web clients properly, make a change involving something called forms mode (which I need to figure out), and use aria live regions (intelligently, there's a few issues with the super-obvious approach).

Offline quixadhal

  • BFF
  • ***
  • Posts: 474
    • View Profile
    • Shadowlord.org
Re: LDMUD
« Reply #14 on: October 24, 2012, 01:02:56 AM »
I wasn't implying that you'd be duplicating the work of a screen reader, nor that you'd be in any way interacting with any other client, web based or not.

You have a protocol, TELNET, which is more or less followed to deliver a raw text stream from the MUD server to the client (whatever it may be).  That data comes as text, generally 8-bit characters using 7-bit ASCII encoding and a handful of ANSI escape sequences for color/highlighting/etc.

A screen reader doesn't access this directly.  It, instead, relies on being able to see things being painted on a scroll region of a window, and then hooks into the update events to scrape the data back off and try to render it down into text, which it can then process and send to a text-to-speech library of some kind.

Why use the middle man?  Why not just connect to the socket and get the text directly, without relying on any given screen rendering technique?

Your points about the user interface are quite valid, and I don't pretend to know how easy or hard it would be to make a client that is actually USEFUL for blind people, especially those who are already used to a given screen reader.

My argument is just that, the core problem seems to be that the screen readers can't reliably access data unless it's rendered in a very particular way, and a way that's falling out of favor with modern app developers.  So, the solution to that is to get the data directly, the same way the normal MUD client does.