经过3.5年的开发,由Nonpolynomial创建和维护的开源紧密触觉控件库Buttplug终于发布了其v1版本。符合条件的是,这也是新的非多项式博客上的第一篇真正的博客文章!
对于项目,这实际上是收缩而不是扩张。版本1意味着该项目已精简到核心Rust实施,生态系统可以在此基础上继续发展。
Buttplug开发人员指南涵盖了基本用法,并提供了上述所有语言的示例。
这是“一种告诉一堆不同的振动器如何振动的方式”的奇特方式。尽管它可以告诉硬件除振动之外如何做事,并且它比对接插头支持更多的外形尺寸。
基本上,那里有数百种计算机控制的性玩具。它们中的大多数具有独特的协议来控制它们。 Buttplug试图集中这些控制协议,为开发人员处理跨平台USB /蓝牙/串行/等,并提出一种统一的方式来控制用户可能拥有的任何玩具。开发人员可以使用Buttplug枚举受支持的设备,然后发送诸如“以[speed]振动/旋转”之类的通用命令,而无需知道用户使用的操作系统以及如何与他们的特定玩具交谈。而已。
虽然Buttplug的性玩具控制部分可能是最知名,最难忘的功能,但这并不是该项目的唯一目标。 Buttplug是作为创建以用户为中心的触觉和接口设备抽象的实验而建立的。库和引擎(如Chai3D和H3D)充当通用的触觉引擎,用于研究机械系统,纹理和力生成/模拟,而其他系统(如VRPN)充当某种用户空间的HID管理器,用于可能不符合通用HID协议边界的系统。 Buttplug试图采用这两种范式,将它们融合在一起,同时还为没有太多工程关注的利基市场提供服务。这导致许多有趣的问题,例如:
我们如何与情感状态可能不同于使用“正常”软件(例如文字处理器或数据库)的用户互动?
我们如何创建一种语言,使其表达能力足以产生用户想要的体验,同时又足够抽象而不是特定于设备?
是否可以通过一个可能只有一个人的小型团队维护的技术来解决这些问题?
不过,我们从社区中得知,有些用户只是对控制性玩具感兴趣,这也很好。我猜。
如果您对用户使用Buttplug的功能感到好奇,请查看我们的awesome-buttplug项目列表存储库。
这是从我开始从事性技术到该领域的v1库的16年历程的概述。
2007年Kyle在Ass Elektronika的一次演讲中提到“模糊宏指令”,这在当时似乎是个好名字,因为Kyle是20多岁的工程师。这个想法将逐渐成为Buttplug的基础。
2013第一个Python实现,称为“ Fuck Everything”。使用ZeroMQ和Python2。由于python应用程序重新分配问题以及市场上缺乏支持的硬件,因此从未满载。
2016年秋季首次实施Rust。由于缺少对蓝牙(我们与之互动的大多数硬件是蓝牙LE)和其他硬件的平台支持而停滞。
2017年4月,第一个C#实现,使用最近发布的Windows UWP BTLE API。库获得发展势头,项目开始,还建立了协议规范以确保版本之间的兼容性。
2017年5月首次实现JS,使用WebBluetooth通过Chrome Web浏览器访问BTLE。后来包括使用noble和其他硬件库的本机Node实现。
2017年12月在Buttplug协议规范中添加了通用消息,使命令各种设备变得更加容易。由于维护时间和总体寿命,这是接下来三年对协议规范的最后一次更改。
2019年4月对Buttplug的Client API的Python实现。所有硬件访问仍通过JS或C#实现进行管理。
2019年9月,意识到对于一个1人开发团队来说,维护2个完整的Buttplug实现是站不住脚的,因此开始着手开发一个新的Buttplug in(那时不稳定)异步Rust的新核心实现,然后将其他语言实现放在首位。
2020年1月,Forked Rumble变成了btleplug(进行了令人作呕的更改,因为隆隆声在Buttplug中本来应该很棒,但是最初的作者是AWOL,所以程序包不能在crates.io上传输),在Windows,macOS中提出了最低的BTLE功能和Linux。
2020年10月核心异步Rust Buttplug实现与C#和JS库实现了功能对等。转到通过FFI将C#/ JS移植为使用Rust。使用导出的C调用,C#调用到本地Rust库中,而JS使用WASM层。
2020年12月v1版本,以及自2017年12月以来首次发布的新规范版本。FFI C#/ JS库与原始本机C#/ JS库持平,已弃用并归档了原始本机库。 Buttplug开发人员指南的格式足以指导用户构建简单的Buttplug应用程序。 Metafetish在16年后关闭,以便为新的Nonpolynomial博客让路。
如前所述,Buttplug版本1并未真正提供许多新功能。在大多数情况下,我可以削减旧的东西并开始展望未来。
Buttplug C#和Buttplug JS现在将被存档,因为实现现在存在于我们的FFI存储库中,它们各自的nuget和npm软件包仍将在v1及更高版本上存在。在C#/ JS的v0.x和v1版本之间肯定会有重大更改,因此,如果您一直在进行开发,请做好准备。我尽我所能使API保持相似,但也使用它作为清理过程中出现的一些问题的方法。
在v1之前,添加新功能或硬件协议意味着至少要在2个地方实现。现在,可以在Rust中实现功能,然后只需重建FFI和正在滚动的软件包版本号即可。更糟糕的是,FFI API表面可能需要进行更改,但是与必须重做全部功能实现相比,这是一件微不足道的工作。 FFI的大部分工作都是在初始实施中进行的,并且希望继续进行维护会更加简单。时间会证明这是否完全是错误。
通过减少可能的死记硬背编码工作来衡量成功。我想花更多的时间在一个灵活的系统上进行设计,而不是不得不多次重新实现我的想法才能在所有平台上对其进行测试。
版本1发行版也可能是唯一一次以相同的版本号同步发行多个库的情况。我怀疑FFI库会出现API表面级别的问题,这将需要在rust库更新时进行主要版本滚动。每个对版本号有兴趣的人现在都喜欢这些星星,因为这可能是最后一次。
现在要去的方向太多了,几乎很难选择开始的方向,但是以下是我下一步要做的一些一般性想法:
博客文章我现在有一个闪亮的新博客,我想更多地使用它。我对Rust,WASM和其他正在使用的技术有很多想法,我想在这里进行介绍。
文档Buttplug v1的文档足以使人们入门,但是针对各种实现的开发人员指南和API文档无疑需要更多的关注。
更多的FFI实现Python即将面世,社区已经要求使用C / C ++(特别是针对虚幻引擎的支持)和Java / Kotlin。
应用程序更新我维护了一些应用程序,例如Intiface Desktop和Game Haptics Router,这些应用程序在v1进行时已被重新备份。真的很想更新这些内容并添加一些新功能。还需要更新依赖库,例如我们的Unity Game Engine和Twine Game Engine支持。
硬件支持v1博客(应该在10月完成,然后发生Hades。哎呀。)意味着对OSR2和Nintendo Joycon之类的东西的硬件支持仍在开发中,并且仍在运行。
实际制造新东西到目前为止列出的所有东西都是持续的维护。实际也做一些新的东西真是太好了。不知道它们是什么,但是我需要真正地用我的创作来创建,而不只是创建我的创作。
在过去的16年中,亲人和朋友不得不忍受我成为“ The Buttplug Guy”(没有迹象表明这种情况很快就会消失)。
我的Patreon和Github赞助商订阅者,他们为该项目提供的资金足以让我购买新硬件。
我的Nonpolynomial咨询客户,他们帮助公司保持了正现金流,同时还帮助我的项目以及产品支持。
每个从事逆向工程玩具并向我们的《我所爱的性玩具协议》(STPIHKAL)文档项目捐赠信息的人。
性科技项目,例如IOSTIndex,XToys,Eroscripts,以及其他管理信息并帮助在其他方向发展性科技社区的项目。 Buttplug只是未来某个更大的生态系统和社区中的一小部分。
一直在使用该库的开发人员社区,或者是他们与社区共享的项目的一部分,甚至是他们为自己所做的事情并保持封闭的状态。很高兴认识到人们正在使用我建造的东西。
一直在社交媒体,会议等上进行观看和互动的人们……这个项目的社交性甚至比技术性还高,因此获得其他观点非常好。
让Buttplug达到v1感觉很棒,但是没有时间休息。 上v2!