JavaScript Mapping Library
I was recently re-reading my Interview with a PornHub Web Developer and one bit I started thinking about was the VR question and the idea of making users not just see but feel` something. The haptic feedback of VR games is what really sets them apart from your standard PC or console game. So when it comes to sex tech, what’s it like to create experiences you feel instead of see? I had the opportunity to interview Kyle Machulis, aka qDot, about coding haptic experiences that give people good vibes. Enjoy!
Warning: This blog post details coding for sex toys and other adult conversation. Please discontinue reading if these topics could offend you.
The original inspiration continues to be the main inspiration today: To let people with the capabilities build whatever it is they want for the computer controlled sex hardware they own.
I didn’t really have a specific niche or community that I was aiming for with this, rather I just wanted to get the boring programming stuff out of the way for people so they could just get to building what they were interested in without having to learn the eccentricities of cross-platform Bluetooth/USB/etc, making sure it connected to the network correctly, and all that…
Funny enough, the original name of the project was Fuck Everything. I had multiple people talk me down from that particular ledge, mostly with the reasoning of “you’ll never be able to easily talk about this in media or have it referenced.”
With that in mind, I still wanted something fittingly ribald, so Buttplug is what I went with (I made a video on that reasoning too: https://youtu.be/c6bghuCy6d8). It was and still is definitely a risk, but what are my alternatives? I could go with something benign, which would work but would be kinda boring (and this is what I did with Intiface, the name of the application line that sits on top of Buttplug, in order to be able to use it in app stores). Since Buttplug is the name of the library, and will mostly be used by developers (“embedded” in their programs, as it were), it felt like a safe place to be a bit silly.
I stated the goal up in the inspiration question, so I’ll stick with that. In terms of measuring the project reach, I feel like that’s best shown by our “Awesome” list: https://awesome.buttplug.io.
This is where I try to keep up with our community in listing everything they’ve built using the library. Most of the concentration tends to be around either Games or Movie sync, but there’s all sorts of projects that’ve sprung up around it, and we hear of new ones every month. The spread of project types alone there is what keeps be going.
Trying to come up with a sort of “common technical language” for intimate haptics is a big part of the technical focus. This is SUPER difficult to do and we’ve already gone down multiple wrong paths, but I knew it was going to be a long course of refinements and I wouldn’t say we’ve tracked too far off, especially given the amount of projects implemented using the library already.
We’ve also ended up having to implement most of our own Bluetooth LE library (https://github.com/deviceplug/btleplug), though I’m lucky that the Rust ecosystem provides us what we need too.
Finally, being able to present the project to people on their turf (programming language/platform) instead of ours is a constant ongoing challenge. We currently ship the main library in Rust, with bindings in C#, Javascript/WASM, Java, and Python, and people have made bindings for languages like Haskell and Go. It’s super important that people be able to approach this work from however they’re comfortable versus having to learn another language, so the design has to stay flexible enough to work across multiple technical contexts.
Here’s a quick timeline of the implementations:
First off, there isn’t really an “onto devices” here. The library isn’t firmware, it’s software, built for applications to communicate with or integrate. Our job is to interface with whatever firmware might be on the device already, but we don’t specify that a certain firmware has to be there. We implement protocols for many different brands, as well as a few open source/DIY systems (like T-Code, a g-code like derivation for toys made by another DIY community project: https://stpihkal.docs.buttplug.io/protocols/tcode.html).
In terms of compilation/distribution, this is just software, like any other, so there’s not much special there. All of our libraries and applications go through CI (a mix of Azure or Github Actions at this point), all of our applications are signed (so people can at least somewhat trust it came from us), etc…
We do support multiple platforms (Win/Mac/Linux/iOS and hopefully Android soon) and languages (the core system is Rust, but there are support libraries in C#, Javascript/Typescript (via WASM), Python, Java, Haskell, Lua, and the list goes on, either written by me or the community), so packaging of those also takes place on CI.
Debugging and testing is… difficult because at this point, we support like 20+ brands of toys plus the DIY projects, and each of those brands may have 10+ toys. All in all (going by IOSTIndex, a website listing all known computer controlled toys: https://iostindex.com/?filter0Availability=Available,DIY&filter1Connection=Digital&filter2ButtplugSupport=4), the library supports 247 toys right now.
I’d love to have a more robust testing system for hardware, as I think as lot of even the hardware testing could be automated in really interesting ways by building mock devices that still use the actual Bluetooth/USB/etc communication busses, but that’s been a project that’s eluded me having the time to put it together.
Obviously we can’t test ALL of those 247 or so toys on every release because the library is mostly me developing it and maybe 1-2 other people helping with a bit of code or QA. We try to test the most popular brands, like Lovense and Kiiroo, and depend on user reports for bugs and updates on breakage. The discord server (https://discord.buttplug.io) has been a fantastic resource for that, as a very engaged community has built up around the library. We often have people show up with toys we haven’t been able to get yet, and can work with them remotely on getting support integrated on the library, sometimes even before any library dev receives one.
In terms of the film industry, our library is used a lot for “movie sync”, which is a community run effort to create scripts that sync hardware to movies. The main place for that is https://eroscripts.com, though there are also companies like SexLikeReal that do hardware sync.
I spent close to a year evaluating and trying out different strategies to go full time on the library, but in the end, while some of those seemed viable, I ended up figuring out that it’s not really something I wanted to do. I’m happy keeping Buttplug as a side project. It’s still an expensive side project though, so I try to keep some cash coming in to fund machines and research hardware.
Most of the funding comes from 3 sources:
It’s not really so much demand as it is acknowledgement of availability. Gamepads with rumble are easily the most widely owned type of computer controlled vibrators. Supporting game controllers that vibrate means that:
So it’s a win for both sides of the community
Certainly, and it’s something I try to stay aware of. I try to only support toys that don’t present a clear danger to users, so while we’re fine with vibrators and strokers, we try to stay away from things like shock collars, electrostimulation, etc. I’m also working on settings that allow users to set maximums for toy output, so they can scale features to their own needs.
That’s also why the library is open source, so if people don’t feel they can trust something on its face, they’re more than welcome to look at the insides or ask me. Even with the project being open source though, I’m also extremely careful about accepting any PRs and require massive amounts of vetting first. We have so many people that really want to help on the library but have never used it, or even worse, say “Oh yeah I’d like to learn [insert programming language here] by contributing” and I always have to ask “Do you trust your just learned code to be in people’s bodies”? I really wish more people said “no” to that question, heh.
That said, there’s only so much I can do, because users are going to do what they want with the system, so I add the safeguards I can, have it security audited, and try to make it as configurable as users need so they can feel safe too.
The project has spawned other projects (https://iostindex.com is run by someone who also works with Buttplug, for instance, and there’s all the stuff on https://awesome.buttplug.io, many with their own communities), it’s got a discord server with thousands of users, and I’ve taught live workshops on it. It’s hard to get an idea of exactly how large it all is these days because there’s just so much breadth, and also because I don’t have visibility into all of it. Since it’s open source and free, and I don’t really do much tracking, sometimes it’ll just pop up in places I don’t expect, or I’ll get tagged into discussions in places I never knew existed.
Unimaginably boring. The same engineering as most places just with different context. I’m usually tuning data structures or figuring out UX issues or whatever, all while surrounded by sex toys that are collecting dust or only turned on to run smoke tests before releases.
The fun days are the ones where I decide to just do something silly with all the crap I’ve built. For instance, this past week I did a quick Elden Ring mod for making a toy vibrate any time that game makes the controller vibrate. The tech wasn’t too out there (there’s an explanatory article here), but watching the reaction on social media is fun, and I end up in conversations that are surprisingly positive most of the time.
For me personally, not at all. I’ve been working in sex tech since 2004, and I’ve used my real name and identity for that whole time. While this has made for difficulties in some places in the past, overall it’s provided an extra level of trust for me. People know who I am, know where the project is coming from, and I have the privilege of being able to share that, which is rare in this kind of technology. There’s a lot of sex tech software authors out there that are required to stay anonymous due to various reasons, and that’s fine and understandable, but I wanted to actually be out there and available about this topic when I saw I had the chance, and it’s really paid off.That said, it’s not something that comes for free. I have to spend a massive amount of time “curating my brand”, for lack of a more human term. There’s a ton of thought that goes into presenting the project as ethical and sex-positive, so much so that I have a whole section of our dev guide dedicated to it. Since this is also on my resume/cv/LinkedIn/etc, I have to constantly be thinking about what the external perspective of the project is, and try to keep the shape of that being something I want.
End of interview
There’s something really interesting about creating haptic experiences. I’ve always relied so much on whether something looks good, but knowing when you’ve created a great haptic experience must be incredibly difficult. Then add the number of devices you want to support, user preferences, the number of vendors, and the stigma the work sometimes brings, it’s gotta be a trip. Huge thank you to Kyle for sharing his perspective and experience!
The post Interview with an Intiface Haptics Engineer appeared first on David Walsh Blog.
David Walsh Blog
You must be logged in to post a comment.
This site uses Akismet to reduce spam. Learn how your comment data is processed.