我最近重新阅读了我对 PornHub Web 开发人员的采访,我开始思考的一点是 VR 问题以及让用户不仅看到而且感觉到一些东西的想法。 VR 游戏的触觉反馈是真正将它们与标准 PC 或主机游戏区分开来的地方。所以当谈到性技术时,创造你感受到而不是看到的体验是什么感觉?我有机会采访了 Kyle Machulis,又名 qDot,讨论了如何编写能给人们带来良好氛围的触觉体验。享受!
警告:这篇博文详细介绍了性玩具和其他成人对话的编码。如果这些主题可能会冒犯您,请停止阅读。
buttplug.io 项目的最初灵感是什么?
最初的灵感仍然是今天的主要灵感:让有能力的人为他们拥有的计算机控制的性硬件构建他们想要的任何东西。
我并没有真正针对这个特定的利基市场或社区,我只是想为人们摆脱无聊的编程内容,这样他们就可以开始构建他们感兴趣的东西而不必了解跨平台蓝牙/USB/等的怪癖,确保它正确连接到网络,以及所有这些……
给它起这样一个直率的名字有什么犹豫吗?这个名字对项目来说是积极的还是消极的?
有趣的是,该项目的原名是 Fuck Everything。我有很多人从那个特定的壁架上说服我,主要是因为“你永远无法在媒体上轻松谈论它或引用它”。
考虑到这一点,我仍然想要一些恰如其分的下流,所以我选择了 Buttplug(我也制作了一个关于这个推理的视频: https ://youtu.be/c6bghuCy6d8)。这绝对是一个风险,现在仍然是一个风险,但我的替代方案是什么?我可以选择一些良性的东西,这会起作用但会有点无聊(这就是我对 Intiface 所做的,它是位于 Buttplug 顶部的应用程序行的名称,以便能够在应用商店中使用它) .由于 Buttplug 是库的名称,并且主要由开发人员使用(“嵌入”在他们的程序中),所以感觉有点傻是一个安全的地方。
项目开始时的目标是什么?项目是如何达到今天的水平的?
我在灵感问题中陈述了目标,所以我会坚持下去。在衡量项目范围方面,我觉得我们的“真棒”列表最能体现这一点: https ://awesome.buttplug.io。
在这里,我试图跟上我们的社区,列出他们使用该库构建的所有内容。大部分注意力都集中在游戏或电影同步上,但是围绕它涌现出各种各样的项目,我们每个月都会听到新的项目。仅项目类型的传播就一直在进行。
从技术的角度来看,该项目背后的一些标志性技术和想法是什么?
尝试为亲密触觉提出一种“通用技术语言”是技术重点的重要组成部分。这非常难做到,我们已经走了多条错误的道路,但我知道这将是一个漫长的改进过程,我不会说我们已经走得太远了,特别是考虑到项目的数量已经使用该库实现了。
我们最终还不得不实现我们自己的大部分蓝牙 LE 库 ( https://github.com/deviceplug/btleplug ),尽管我很幸运 Rust 生态系统也为我们提供了我们需要的东西。
最后,能够在他们的地盘(编程语言/平台)而不是我们的地盘上向人们展示项目是一个持续不断的挑战。我们目前使用 Rust 发布主库,并在 C#、Javascript/WASM、Java 和 Python 中进行绑定,并且人们已经为 Haskell 和 Go 等语言进行了绑定。人们能够以他们感到舒服的方式来处理这项工作而不是不得不学习另一种语言,这一点非常重要,因此设计必须保持足够的灵活性以在多种技术环境中工作。
有哪些重要的工程术语需要了解?
- 触觉——对触觉的研究
- 触觉反馈——使用触觉通知用户事件或其他情况
- 隆隆声 – 我们通常如何讨论视频游戏反馈,游戏手柄中的电机
- “HD” Rumble/Haptics——消费者触觉的最新发展,主要是在较新的游戏控制器(Switch Joycon、PS5 DualSense、VR 控制器)中,它使用可以快速改变速度的小型执行器,将触觉词汇从隆隆声扩展到诸如轻击之类的东西,敲门声等……
- Teledildonics – 最初的术语(由 Rheingold 创造)是指两个人之间的远程性行为,但现在这个术语被广泛用于指代一般可以与计算机通信/由计算机控制的性玩具。
从项目开始到现在,您的技术方法有何变化?随着时间的推移,每种语言(JavaScript、Rust 等)如何改进以使项目变得更好?
以下是实施的快速时间表:
- 2013 年:尝试在 Python 中实现一个简单的实现,但没有成功,因为可用的硬件不多,而且蓝牙支持无处不在。
- 2016 年:尝试了 Rust,但为时过早,我将不得不从头开始实施太多。 Tokio 是当时的异步选择,但使用起来相当复杂,而且我习惯于其他语言(JS/C#)的异步结构,所以它并不顺利。
- 2017 年:开始尝试在 C# 中实现,因此我们至少能够使用其新的 UWP 蓝牙 API(2017 年 4 月推出)支持 Windows。这效果非常好,但也将我们与 Windows 和 C# 联系在一起,即便如此,我在 Rust 中真的更舒服,并希望系统完全跨平台。
- 2017 年晚些时候:添加了 Buttplug JS,因为我们有可用的 WebBluetooth/WebUSB/WebGamepad。这是一个完全独立于 C# 的实现,因为 WASM 还不是一个真正的东西。
- 2019:终于厌倦了维护 C# 和 JS 的并行实现,Rust 即将发布异步并且 WASM 开始看起来不错,因此开始在 Rust 中开发第三版 Buttplug,同时仍然保持 C#/JS .
- 2020 年:突然我在家有了很多空闲时间,所以 Rust 的实施持续了一年。到年底,我们不仅有了 Rust 实现,而且 C# 在 Rust 之上使用基本相同的 API,Rust 也几乎可以直接编译为 WASM,这意味着我们拥有大约 95% 的支持所有不同语言实现的相同代码
- 2021:完全迁移到 Rust,这就是我们今天仍然存在的地方。
您的代码如何从原始源代码到编译,然后到设备上?测试和调试过程是什么样的?
首先,这里没有真正的“设备上”。该库不是固件,而是软件,专为应用程序通信或集成而构建。我们的工作是与设备上可能已经存在的任何固件进行交互,但我们没有指定某个固件必须存在。我们为许多不同品牌实施协议,以及一些开源/DIY 系统(如 T-Code,一个 g 代码,类似于另一个 DIY 社区项目制作的玩具的派生: https ://stpihkal.docs.buttplug.io /protocols/tcode.html )。
在编译/分发方面,这只是软件,就像任何其他软件一样,所以没有什么特别之处。我们所有的库和应用程序都通过 CI(此时混合了 Azure 或 Github Actions),我们所有的应用程序都经过签名(因此人们至少可以在一定程度上相信它来自我们),等等……
我们确实支持多种平台(Win/Mac/Linux/iOS,希望很快会支持 Android)和语言(核心系统是 Rust,但在 C#、Javascript/Typescript(通过 WASM)、Python、Java、Haskell、Lua 中有支持库,并且列表还在继续,由我或社区编写),因此这些打包也发生在 CI 上。
调试和测试……很困难,因为在这一点上,我们支持 20 多个品牌的玩具加上 DIY 项目,每个品牌可能有 10 多个玩具。总而言之(通过 IOSTIndex,一个列出所有已知计算机控制玩具的网站: https ://iostindex.com/?filter0Availability=Available,DIY&filter1Connection=Digital&filter2ButtplugSupport=4),图书馆目前支持 247 种玩具。
我希望有一个更强大的硬件测试系统,因为我认为通过构建仍然使用实际蓝牙/USB/等通信总线的模拟设备,即使是硬件测试也可以以非常有趣的方式自动化,但那是这是一个让我没有时间把它放在一起的项目。
显然,我们不能在每个版本上都测试所有 247 个左右的玩具,因为这个库主要是我开发它,也许还有 1-2 个人帮助处理一些代码或 QA。我们尝试测试最受欢迎的品牌,如 Lovense 和 Kiiroo,并根据用户报告的错误和破损更新。 discord 服务器 ( https://discord.buttplug.io ) 是一个很好的资源,因为围绕图书馆建立了一个非常活跃的社区。我们经常有人带着我们还没有得到的玩具出现,并且可以与他们远程合作以获取集成到图书馆的支持,有时甚至在任何图书馆开发人员收到之前。
每种编程语言可以添加什么来使 buttplug.io 变得更好?
- Rust 为我们提供了安全的基础,我需要在发布一个实际以多线程方式在人体中工作的项目时感觉良好。
- JS/WASM 使得原型制作变得非常容易,非常快速和短暂,因为人们可以完全在浏览器中使用 Buttplug。这意味着如果他们不想在他们的机器上查看 git repos 或有其他可能被视为有罪(因为缺乏更好的术语)的东西,他们可以在故障或 jsfiddle 或其他任何东西中做一些事情,并且仍然有全硬件控制
- C# 现在是我们通向游戏的门户,特别是对于 Unity。我们有一个 Unity 插件以及一个完整的 C# 库,那里的开发人员比 Rust 的开发人员多得多,因此它扩展了使用范围。
- 与 Python 相同。人们可以快速轻松地制作原型,并且让更多人知道它。
- 我打算做 C++ 的唯一原因是目前支持 Unreal。 🙂
使用您的项目的组织有哪些?你的作品有闯入主流成人电影行业吗?
- https://xtoys.app使用我们的库进行一些硬件集成(尽管它们支持的硬件类型比我们多!)
- ViRo Playspace使用我们的库进行硬件访问,并在 Steam 上分发!
- 我们也参与了很多 Patreon 资助的游戏,比如Heat和FarmD
就电影行业而言,我们的库被大量用于“电影同步”,这是一个社区运行的努力,旨在创建将硬件与电影同步的脚本。主要的地方是https://eroscripts.com ,尽管也有像 SexLikeReal 这样的公司进行硬件同步。
大多数开源项目的一个难题是资金和货币化——这些年来货币化是如何融入项目的?
我花了将近一年的时间评估和尝试不同的策略来全职在图书馆工作,但最后,虽然其中一些似乎可行,但我最终发现这并不是我真正想做的事情。我很高兴将 Buttplug 作为一个副项目。不过,这仍然是一个昂贵的副项目,所以我尽量保留一些现金来资助机器和研究硬件。
大部分资金来自3个来源:
- 众筹:我使用 patreon ( https://patreon.com/qdot ) 和 github 赞助商 ( https://github.com/sponsors/qdot ),尽管 patreon 已经占了收入的 90% 以上。我提供等级,捐助者可以获得每周更新、贴纸、一对一视频会议等……这是与社区互动的一种非常好的方式
- 附属公司:事实证明,性玩具公司会付钱让你为他们卖玩具,而且由于图书馆没有其他公司的玩具就不会真正存在,这最终也是该项目的一个很好的货币化策略。它还使我能够与公司建立合作伙伴关系,这在我之前并不是真的能够做的事情,因为很多公司认为 Buttplug 会带走收入而不是带来新用户。
- 咨询:感谢我在 Buttplug 获得的所有经验以及这些年来与性技术合作的所有经验,我现在可以为该领域的公司提供性技术方面的工程、用户体验等方面的咨询。图书馆所做的以及我们的社区所构建的仍然远远领先于大多数公司看到他们的用户所要求的,所以和我一起工作可以让他们规划未来的样子。
我在您即将支持的设备列表中看到了各种视频游戏控制器。我不得不问……这些类型的设备对支持的需求是什么?
这并不是真正的需求,而是对可用性的承认。带有隆隆声的游戏手柄很容易成为最广泛拥有的计算机控制振动器类型。支持振动的游戏控制器意味着:
- 开发人员可以在他们的桌子上放一些不是用来测试的玩具的东西
- 用户可以在实际花钱购买玩具之前查看使用 Buttplug 的程序做了什么
所以这对社区双方来说都是一个胜利
您的项目是否需要考虑任何健康责任?虫子会对某人造成身体伤害吗?
当然,这是我试图保持警惕的事情。我尽量只支持对用户没有明显危险的玩具,所以虽然我们对振动器和敲击器很好,但我们尽量远离电击项圈、电刺激等。我也在研究设置允许用户设置玩具输出的最大值,以便他们可以根据自己的需要扩展功能。
这也是图书馆是开源的原因,所以如果人们觉得他们不能相信它的表面上的某些东西,他们非常欢迎查看内部或询问我。尽管该项目是开源的,但我在接受任何 PR 时也非常谨慎,并且需要先进行大量审查。我们有很多人真的想在图书馆上提供帮助但从未使用过它,或者更糟糕的是,说“哦,是的,我想通过贡献来学习 [在此处插入编程语言]”,而我总是要问“是否你相信你刚刚学到的代码存在于人们的身体中”?我真的希望更多的人对这个问题说“不”,呵呵。
也就是说,我能做的只有这么多,因为用户会对系统做他们想做的事,所以我添加了我能做的保护措施,对其进行安全审计,并尝试使其可根据用户的需要进行配置,以便他们可以也感到安全。
自成立以来,该项目如何发展?什么是社区存在?
该项目催生了其他项目(例如, https ://iostindex.com 由也与 Buttplug 合作的人运营,所有的东西都在https://awesome.buttplug.io上,许多都有自己的社区),它有一个不和谐的服务器 拥有成千上万的用户,并且我已经教授了有关它的现场研讨会。现在很难知道这一切到底有多大,因为广度如此之大,而且我对所有这些都一无所知。由于它是开源和免费的,而且我并没有做太多的跟踪,所以有时它会在我没想到的地方突然出现,或者我会在我不知道存在的地方被标记到讨论中。
你典型的工作日是什么样的?
无聊到无法想象。与大多数地方相同的工程只是具有不同的上下文。我通常在调整数据结构或解决用户体验问题或其他任何事情,同时被收集灰尘或仅在发布前打开运行烟雾测试的性玩具包围。
有趣的日子是我决定用我已经建立的所有垃圾做一些愚蠢的事情的日子。例如,在过去的一周里,我做了一个快速的 Elden Ring 模组,让玩具在游戏使控制器振动时振动。技术并没有太多(这里有一篇解释性文章),但观看社交媒体上的反应很有趣,而且我最终的谈话大部分时间都令人惊讶地积极。
告诉朋友、家人和熟人您从事成人玩具技术工作是否有污名?告诉别人你在做什么时会犹豫吗?
就我个人而言,完全没有。自 2004 年以来,我一直在从事性技术工作,并且一直使用我的真实姓名和身份。虽然这在过去在某些地方造成了困难,但总的来说,它为我提供了额外的信任。人们知道我是谁,知道项目来自哪里,我有幸能够分享这些,这在这种技术中是很少见的。有很多性技术软件作者由于各种原因被要求保持匿名,这很好并且可以理解,但是当我看到我有机会时,我想真正去那里并可以讨论这个话题,而且它是真的得到了回报。
也就是说,这不是免费的。由于缺乏更人性化的术语,我不得不花费大量时间“策划我的品牌”。将这个项目呈现为道德和性积极的项目有很多想法,以至于我有一个完整的开发指南部分专门介绍它。由于这也在我的简历/简历/LinkedIn/etc 上,我必须不断地思考项目的外部视角是什么,并尽量保持我想要的形状。
面试结束
创造触觉体验真的很有趣。我一直非常依赖某件东西是否好看,但要知道你什么时候创造了出色的触觉体验肯定是非常困难的。然后添加您想要支持的设备数量、用户偏好、供应商数量以及工作有时带来的耻辱,这一定是一次旅行。非常感谢凯尔分享他的观点和经验!