Tuesday, December 7, 2010

Dismay Names

So one thing that happened while I was away from SL: Linden Lab has rolled out support for Display Names.

With Display Names, every avatar on the Second Life grid can change their name to anything they like—although they need a viewer that supports Display Names to do it. Linden Lab first mentioned Display Names back in August, and the final version of the feature is largely what they described—although there are some gotchas. Users can set their name to anything they like—including names with UTF-8 and Unicode characters!—while at the same time having an immutable underlying "User Name"—mine would be lou.netizen. However, since Display Names lets folks choose any name they like, Linden Lab has now done away with last names for new accounts. There will apparently be no more "Netizens"—every account created since Display Names rolled out has the last name "Resident."

Linden Lab has taken some steps to make sure Display Names aren't easily abused to grief or confuse people. For one thing, users can only change their name once a week, which should prevent people from constantly spoofing each other in chat or appearance. Also, in Linden Lab's official Viewer, Display Names are almost always shown along with those immutable firstname-dot-lastname "User Names." So, if you see chat from "Lou Netizen (lou.netizen)" can you be sure it's me, but if you see it from "Lou Netizen (somerandom.resident)" you can be sure it's not me.

I think it's great that Display Names give people more flexibility about their identity in Second Life, and I see tons of valid reasons to take advantage of the feature. (My personal one might be that I've never really cared for "Netizen" as a last name.) However, I do have some issues with the way Linden Lab has implemented Display Names.

First, there's just the sheer clutter. Now, by default, if you enable Display Names everyone has two names instead of one. That's supposed to mean that nobody can pose as someone they're not, but the reality means that twice as much screen and window real estate gets devoted to names. It's bad enough that tags over every avatar's heads are now two or three lines instead of one or two, but messaging and chat windows are now completely overburdened with name data, since everyone is identified by Display Name and User Name. You can control whether Display names appear over avatar's heads, but can't control how they're identified in chat or IM. To cope, you have to make chat and IM windows wider, obscuring more of the world, making the whole SL experience that much more difficult. Can't say that's won me over.

Another upshot is that every avatar seems to have three names now: a Display Name, a User Name, and a Full Name. (Technically there's kind of a fourth: a key, a computer-friendly universally unique ID that you have to use to, say, have a script pay money to an avatar. But I'm digressing a bit.)

Display NameWinston Churchill
(or whatever you like)
User Namelou.netizen
(immutable, always in first-dot-last lowercase)
Full NameLou Netizen
(immutable, for new accounts last name will always be "Resident")
(immutable, not people-friendly)

At the moment, all this discussion has been hypothetical. Because the reality right now is that Display Names and User Names only work sometimes. Apparently, Second Life's infrastructure just isn't able to say what someone's User Name or Display Name might be at any given moment! So if you have a viewer that supports Display Names, you see lots of people walking around with the name "??? (???)" Which, believe me, completely undermines the idea that Display Names won't cause havoc. I've been "back" in SL with Display Name support for about four hours, and already have chat transcripts like this:

??? (???): are display names working?
??? (???): nah I can't see your name lol
??? (???): u r just question marks
??? (???): i know!
??? (???): grrr arrgh
??? (???): how r we supposed to tell who is who
??? (???): dont know
??? (???): bummer my display name is cool
??? (???): what is it
??? (???): ??? ??? hahaha!

Wow, that's super cool Linden Lab. No potential for confusion or griefing at all there, nope. And that's not just how the names get displayed in chat and IM windows, that's how they get saved in your chat logs. (For the record, there are three people talking in that transcript.)

Another result is that scripts that utilize a Second Life user's names—say for labels, messaging, notecards, logs, chat, payments, and other purposes—may now have to be adjusted to account for Display Names. A simple example would be a greeter, the kind of script that says hello to people when they arrive at a location. Generally you want those kinds of things to be friendly: it's more pleasant to have one address you by first name ("Hi, Lou—welcome to my store!") than by full name ("Greetings, Lou Netizen"!) But even if you want to go the formal route, not many new SL users are going to be thinking of themselves with the last name "Resident." Admitedly, "Greetings TommyB123 Resident!" might be friendlier than a colonoscopy, but it's definitely off-putting when you've gone to the trouble of setting your username as "Kewl McKewlio III, Esq." You'd like to be called "Kewl" because, obviously, you are.

So, Linden Lab has introduced some new LSL functions to get user's Display Names and User Names, while Full Names are now accessed using functions script previously used to get avatar names. (These now carry a "legacy" label, implying they'll go away one day.)

However, these new functions suffer from the same Display Name and User Name ignorance as the rest of Second Life. If you're writing a script that needs to use someone's Display Name, you can call llGetDisplayName()…and hope. Furtively. According to Linden Lab: "Either of "???" or "" is returned if the region is unable to return display names. This can happen even if display names are enabled on the region, especially the first time a given key is checked. At least one retry may be advisable." In English, the official documentation of these functions is that they don't necessarily work and don't return errors if they fail, so you should just keep trying them madly over and over again until, maybe, they work. Maybe. Keep trying.

Wow, that's just super cool, Linden Lab.

It gets better. The two functions to get Display Names and User Names (llGetDisplayName() and llGetUsername()) only work if the person whose name you want is in the same region (e.g. sim) as the script. If your script needs to look up someone's preferred name who happens to be in any other of Second Life's tens of thousands of sims (say, you to previous customers about a sale at your store, or you need the name of someone who just logged off) you have to use llRequestDisplayName() or llRequestUsername(). These operate via the LSL data server, which is a way of getting certain bits of data asynchronously. Basically, you fire off your name request to the greater Second Life "cloud," and then your script sits around twiddling its thumbs while SL takes its own sweet time to consider your request, puts it in queue, files its nails, and deigns to get back to you. When the name comes back, your script has to catch it, store, it, then pick up where it left off. Hopefully nothing important happened in the meantime.

Now, you'd think, what with the dataserver lookup functions having all the time in the world to get around to answering a request, they might work. Nuh-uh. Linden Lab's official documentation for the functions says "If the request fails for any reason, there will be no error notice or dataserver event." In other words, if there's a problem, Second Life is just never going to get back to you with a name. Ever. Nor is it going to tell you there was ever a problem: your request goes into a black hole. Poof. It's like that email to human resources asking about your missing expense check.

Experienced scripters and folks with a moderate programming background can get around these issues without much difficulty—although, depending on their script, it might be really annoying. For the functions that work in the current sim, scripters can use loops, semaphores, and/or timer events to fire off repeated queries until Second Life delivers up a name. These techniques mean the scripts put a greater burden on the servers, but—as any sim owner will tell you—it's not like anyone writing scripts in SL gives one whit about contributing to lag, right? For the data server functions, scripters will probably need to use timers to determine whether their requests have not come back, and fire off another one if they feel they've waited around too long. The upshot of all this is that writing simple, straightforward scripts that do everyday things in Second Life—greet people by name, thank them for a tip, whatever—are now significantly more difficult to write so they can address users by their preferred names.

Oh, and there's one more thing: "It may take up to 72 hours for a display name change to take effect. During this time scripts may report the old display name and viewers may see the old display name." So, even if scripts get a name back from these functions, it might not be the right name.

Wow, that's just super cool, Linden Lab.


  1. Heh heh, Welcome Back Lou.Netizen...
    Hmm... since you were last here: well, search is still broken
    ... sim crossings are still a mirthful moment (unless you were in a hurry)
    ... Viewer 2.ought oh is still further confusing the new people
    ...Viewer 2.ought oh is still confusing the old people

    ...but because we had people that only logged in once to the "New User Experiment" (ooops Experience) and complained that they hated their name {'cause they wasnt kewl} We gots new names now

  2. Heck...re read that & its still funny.....


Comments are moderated. You can use some HTML tags, such as <b>, <i>, <a>. If you'd like to contact me privately, use a blog comment and say you don't want it published.