Metafetish

Freesex - Sex and Second Life - LibSL Edition

Freesex - Sex and Second Life - LibSL Edition

qDot and Emilio giving an exhibition. Hawt.

Don't call it a comeback

Even though it totally is and we all know it. This move to San Francisco (for those of you unaware: I just moved to San Francisco. You know, just in case you didn't read or process those last 5 words correctly.) has completely blown my posting schedule. However, I've managed to preservere and keep half-assing shit together in my trademark half-assed way, which brings us to today's article: TranceVibe (and teledildonics in general) in Second Life, volume 2.

I should probably preface that this article is gonna be somewhat dry if you're not directly involved in Second Life programming. I'm assuming you have at least knowledge of the world, and possibly some knowledge of programming in the world.

I'll also have a copy of this on my non-dildo-in-the-header website, Nonpolynomial Labs. It'll be the exact same text, minus the dildos (Yeah, I don't know why people would want that either. Workplaces would be a much happier environment with more dildos).

Where we left off

So, why do we need a volume 2? Simple. Volume 1 sucked.

However, for those of you not familiar with Second Life, I suggest you check out the first article to get an idea of what the hell is going on.

Let's look at our needs. In trying to make a teledildonics client, we'd preferably like to have the highest polling rate (the rate at which we recieve updates from the controller) possible. Since this isn't a built in function of the Second Life software itself, the scripting language would have to be used. There's 3 built-in communications schemes of the Second Life scripting system at the moment.

  • Email - You can send 1 every 20 seconds per script. Obviously not gonna work.
  • XML-RPC - This is what version 1 worked on. You can /reply/ to 1 request every 3 seconds per script (more with script multithreading, the act of linking multiple objects together and then having the root prim manage the "prim thread pool" of objects by delegating calls to be made by scripts not currently in a resource wait). However, you cannot make outbound connections, only reply to inbound connections, and there's no guarentee of delivery. Which means you had to figure out some way of getting the XML-RPC channel ID to whatever needed to communicate with the object. While great for proof of concept, this didn't work so well for actual usage.
  • HTTP - This is new! And still kinda slow. As of this writing, you can make 20 outgoing HTTP requests every 100 seconds per agent per region (basically, all of your objects on a single simulator take up that resource). As of tomorrow, I believe this moves to 1 request per object per second, which, while better (and also a candidate for prim thread pooling), still isn't great for our needs. While we could probably do something managable, there also exists the issue of passing the calls back and forth between clients. Either IPs would have to be exchanged and firewall ports opened, or else a proxy would have to be used.

Those are the choices given to us by Linden Lab. However, we can do better than that.

LibSL: ZOMG HAX, but in a good way

Enter LibSecondLife. LibSecondLife is the work of Eddy Striker, Bushing Spatula, Baba Yamamoto, and Adam Zaius (all SL names, of course), that reverse engineers the Second Life communications protocol. The library is written in C# using MS .Net 1.1, and can be used to translate packets before they get to the client, or inject new packets into the outgoing stream. Why is this important to us? Well, I'll get there in about 6 paragraphs from now.

Second Life is a series of pigeons...

For what we're interested in, the Second Life Client and Servers talk to each other in a format that looks something like this:

// ChatFromSimulator
// Chat text to appear on a user's screen
// Position is region local.
// Viewer can optionally use position to animate
// If audible is CHAT_NOT_AUDIBLE, message will not be valid
{
    ChatFromSimulator Low Trusted Unencoded
    {
        ChatData            Single
        {   FromName        Variable 1  }
        {   SourceID        LLUUID      }   // agent id or object id
        {   OwnerID         LLUUID      }   // object's owner
        {   SourceType      U8          }
        {   ChatType        U8          }
        {   Audible         U8          }
        {   Position        LLVector3   }
        {   Message         Variable 2  }   // UTF-8 text
    }
}

That's just 1 of the messages. If you're interested in all 600andsome messages that make up the system, an old version can be found here. An up-to-date version can be found by snooping around the libsl page somewhat, I'm sure. This template changes with almost every update of the SL software, so anything static I'd link to will probably be out of date by the time you read this.

Much of the interaction in Second Life takes place using these messages. LibSL has a program built on top of it called SLProxy that sits on the client machine, watching the messages as they pass between the client and server, and performing special processing on them if need be.

Now, I used the "chat from simulator" message as an example there for a reason. As you can see, in that message, we recieve the name of who/what sent the message, its/their ID (This is a 128bit UUID), various information about where the message came from, and finally, the body of the message (up to 255 characters). All of this data gives us more than enough to work with to create a decent teledildonics client using the SL client and SLProxy.

Through some very basic testing, it's been found that you can get between 10-20 chat messages per second from a sim, depending on sim load (number of agents, number of scripts, so on and so forth). Even the lower bound on this is much better than we could get with the built in LSL functions, and produces much less server-side load.

World's Worst Interfaces for 200, Alex

This idea was inspired by Huns Valen's SLJoy project.

Here's how my crappy, written in 1 hour client worked.

private static Packet ChatFromSimulator(Packet packet, IPEndPoint sim) 
  {   /*.....Lots of message processing code cut.....*/
    if(name.Equals("Object"))
    {
        try
        {
            //usbcontrol = The USB Controller Driver for the TranceVibe
            vibval =(UInt16.Parse(message));
            usbcontrol.SetPower(vibval);
        }
        catch(SystemException e)
        {
            Console.WriteLine("Cannot parse message: "+message);
        }
    }
    /*....Continue to send message to client....*/
  }

Yup. That's it. We watch for chat coming from anything named "Object", expect the message from it to be an 8-bit integer. If it is, we set our vibrator to that value. If it's not, we complain and go on with life.

I repeat. This is not rocket science.

That source I promised 3 weeks ago.

Yup, here it is. (Update 2013-05-25: This now points to my github repo. It's in there.)

This will need to be extracted into the applications directory of a libsl svn checkout which can be picked up at their gna.org site.

You'll also need the usb DLL in the same directory with your executable. To install the TranceVibe if you haven't yet, just plug it into your computer, then choose the .inf file included with the zip as your driver.

This code is released under the "I wrote like, 5 lines of this. I don't care what you do with it, since it has to do with teledildonics it's gonna come back to me at some point, so I already pwn your ass." license.

Where to go from here

This is just the base of what I hope to be a much more expansive project. As I said in my presentation, I'm very interested in making extensible interfaces other people can build on to easily create their own control schemes. Hopefully others will pick up the ideas from this code and go their own directions, too. SL is a fun platform to work on, and I can't wait to see what ideas others come up with.

Lego Vibrator - The Fuck-o-matic

Lego Vibrator - The Fuck-o-matic

Well, I said not to shove cellphones into your nether regions, and I should probably continue that warning here.

Just because you can make the lego vibrate, doesn't mean you should then take advantage of it. However, it is a fairly awesome idea. Since it's attached to an RCX brick, you can use one of the many languages available to interact with the brick through IR. Hook that to a network, and you're good to go.

God. I just seriously thought about that.

However, you might want a slightly more powerful motor than the little gray ones that come with the kit. Oh yeah, and maybe shave down the edges on the lego.

So, Steve Digman, who built the mighty piece of machinery (and who's CC license I have now fulfilled so I can post the whole thing if I wanted to, but I'll let his bandwidth deal with it instead), we salute you. With what body part, well, that's another question.

via Hack-A-Day

Brenda Brathwaite's Sex In Games Book Released

Brenda Brathwaite's Sex In Games Book Released

Wow. It's actually out.

This is the new bible of sex in video games. Brenda Brathwaite spent over a year combing the history of video games, speaking to many developers old and new, researching the latest sex technology and innovations, and calling me at all hours of the night to get my opinion on why the 2003 vintage of pixelated boobs was so much better than the 2001 vintage, in order to put this book together. It's been a labor of love, hate, then some more love, then slight frustration, then hate again, then a little love, and finally, relief. So, go buy a copy for every flat surface in your house. It also makes a great Halloween/Thanksgiving/Christmas/Bar Mitzvah/Christening/Briss/Birthday/All of the Above present! It's a dessert topping AND a floor cleaner!

Oh yeah, and you can get it for $10 cheaper at Amazon

There are better things for that

So I know I've been quiet lately. The move to the Bay Area and basically overhaul of life in general have been keeping me quite busy.

I realize a lot of you may find this time frightening and worrysome, since you currently lack the internet's premier resource on sex and technology.

However, I implore you.

Do not start shoving cell phones up your butt. I know it has a vibrate function, but that's not what it was meant for.

Honestly, it's just not a good idea. I swear I'm working on new stuff, I'll be posting again soon, and we'll all live happily ever after.

Please, people, no more anal cell phone deaths.

I Am Way Too Tired To Make A Real Title For This Post

I'm in Wired again.

First off, the corrections:

In qDot's demo, he introduced his Second Life cube avatar to a smaller, more feminine cube avatar.

nose bridge pinch

Regina, I think Emilio is a little hurt by you calling him feminine. Yes, he's a little smaller than me, and yes, he's plywood, but that's no reason to say that he's FEMININE. I'm gonna be working for weeks to build his self-esteem up again, he makes a horrible top when he gets in his "mood", and let's not even get into the state my pool is gonna be in.

Fuck, he's so depressed in that picture. I mean, really, feminine? Does he look like a straight line to you, huh?

Anyways.

So you're probably wondering where that code I promised in the video is. Well, it's certainly, um, around. Unfortunately, it won't be up until mid-day tomorrow at the earliest, and even then, it's not clean, it's not nice, it's totally proof of concept, but hopefully someone will take the concept and run with it. God knows I don't have time lately. When it does come up, if you want help using it in your own system, throw email at our tips address on the right side of the page (if you're reading this through RSS, go visit the damn page. :P ). I can't promise I'll get to your request soon if ever, but I'll try. You may also want to gather and discuss in our forums, which I think I've ridden of spam for now at least.

That brings me to my next point, though. Something I've been thinking about, and I'm hoping someone will back me up on this.

I don't really have time to do much development on the SexBox v5/6 lately. This (That's the Lego Mindstorm NXT brick for those of you who might be wondering) has motor drivers (LB1930Ms if I'm not mistaken), bluetooth and USB communication, and open (also if I'm not mistaken) firmware. Slice a couple of motor cables open, attach 2.5mm jacks (and possibly some regulation hardware so we don't smoke the board)...

You thinking what I'm thinking?

(I realize it's a smidge on the expensive side, and technically I /should/ be able to communicate with the RCX brick through Serial->IR, which would be a much cheaper solution. Anyways, you can see the direction I'm going here. Consider this license to beat me to it, start your own blog, and become wildly internet famous like I have.)