返回首页
最新
嗨,HN!我是Vince。我构建了Nallely,这是一个模块化的反应式Python框架,用于通过将信号处理模块连接在一起来创建自定义MIDI乐器,就像一个控制系统的模块化合成器。Nallely专注于实时、线程隔离的反应式行为,让你可以实验新兴的行为。
<p>演示视频:<a href="https://www.youtube.com/watch?v=rbMnKAdqAVI" rel="nofollow">https://www.youtube.com/watch?v=rbMnKAdqAVI</a>,展示了从零开始构建一个补丁,并在最后进行热调试。</p>
<p>主要特点:
* 连接反应式模块(神经元)的可视化补丁界面,
* 通过Python API、WebSocket和/或代码生成进行扩展,
* 集成任何输入源(MIDI、网络摄像头等)以控制合成器。</p>
<p># 是的,但为什么?
现有的软件/库虽然在MIDI操作方面功能强大,但不利于实时实验。它们是低级的,难以动态重连,且通常对于嵌入式或无头设置来说负担较重。我希望有一个系统能够动态演变,模块可以实时补丁、热插拔和调试。</p>
<p># 架构
该系统围绕一个没有共享数据的反应式线程模型构建:每个神经元都在自己的线程中运行,并通过通道发送消息进行通信。不再有CC……在神经元级别,一切都是信号(一个简单的整数/浮点值随时间变化)。没有全局时钟,每个神经元都在自己的时间上工作。由于每个神经元都是反应式的,它们大部分时间处于休眠状态。该系统深受“系统如生命体”哲学和Smalltalk的启发,将每个线程视为一个小的生命实体,而不仅仅是一个处理单元。以下是如何编写一个简单的采样保持模块:</p>
```python
class SampleHold(VirtualDevice):
input_cv = VirtualParameter(name="input", range=(0, 127))
trigger_cv = VirtualParameter(name="trigger", range=(0, 1), conversion_policy=">0")
@on(trigger_cv, edge="rising")
def hold_value(self, value, ctx):
return self.input
```
<p>控制层使用一个小型WebSocket协议,反应式的Web UI利用它来控制和检查会话。一个WebSocket总线神经元允许外部应用程序自动注册,以发送/接收信号:网络中的另一个神经元可以提供从任何源捕获的信号。它们对于在不同机器上分配计算负载非常有用。</p>
<p># 到目前为止我学到了什么
在MIDI/音乐上下文中,简单的线程模型可以非常强大:
* 你可以停止/恢复一个线程,毫无缝隙地停止处理链的一部分;
* 溢出的神经元可以减轻压力,而不会影响整个会话;
* 如果一个线程崩溃,它会被暂停,以便你能够调试该实例,并恢复它;
* 简单的WebSocket具有可接受的吞吐量。</p>
<p>我原本以为一个完全基于Python线程的系统会非常低效,但结果出乎意料地合理。根据经验,我发现每个线程的CPU使用率约为1-2%。一个20线程的经典会话(约45个补丁)在CPython 3.13 GIL下大约使用21%的CPU和45MB的内存。CPython 3.14无GIL显示出类似的CPU使用率,但内存约为65MB。反馈循环会提高使用率(约38%)。有趣的是,在CPython 3.13中,负载分布在多个核心上,我想线程足够休眠,能够频繁释放GIL。</p>
<p># 尝试一下!
你可以在最新的GitHub Actions构建的工件中获取预编译的PyInstaller二进制文件。文档链接在自述文件中,深入文章可以在这里找到:<a href="https://dr-schlange.github.io/nallely-midi/posts" rel="nofollow">https://dr-schlange.github.io/nallely-midi/posts</a>。</p>
<p># 我希望得到反馈
* 有什么可以改进的地方,以便让人更容易上手?
* 是否存在盲点或设计选择,可能在长期内造成问题?
* 尽管它是以MIDI为导向,但系统实际上是信号无关的,有什么非音频使用案例的想法吗?(例如视觉等)</p>
我很欣赏关于“谁在招聘 / 谁想被招聘”的帖子。我想知道我们是否可以稍微改变一下这个模式,讨论一下人们是如何找到他们现在的工作,或者那些在他们职业生涯中有意义和影响力的工作的。
定位:你是如何找到这份工作的?是这份工作找到你的?
面试:你做过什么让你脱颖而出的事情吗?有没有一些可能不太直观的不同策略?
生存:每份工作都有其缺陷,你是如何在面对让之前的工作变得困难 / 不愉快 / 无法忍受的问题时,维持自己的收入能力的?
我目前失业,早些时候辞去了在美国某州工作的职位,因为他们没有将软件开发视为一项重要工作。当你无法进行任何测试,得不到基础设施或项目管理的支持,所有事情都必须自己在一个封闭的环境中完成时,完成工作是非常困难的。还得在一个储藏室里的服务器上运行应用程序。
这是我人生中第一次“选择自己”,辞去了对我的心理健康产生非常负面影响的工作。找到一种方法重新回到职场很困难,因为我需要面对对敌对和有毒工作环境的恐惧。
希望能得到一些想法或方向,给我一些新的尝试,而不是一遍又一遍地做那些失败的事情。
PR测试审查与增强 – 一种能够审查您在PR中的测试并建议缺失用例和必要改进的人工智能。