我已经在DMX照明应用程序上工作了一段时间,我觉得我在这个过程中学到了很多关于软件设计的知识。例如,数据隐藏,具有私有成员和访问功能,是保证类只能按预期,线程安全使用的好方法,但它也可能过度到令人讨厌和难以扩展的程度。这一点很好,但是......无论如何,回到问题。
我现在正在考虑的是如何将用户代码合并到其中,以使其完全自由形式。我有一种特定的方式,我喜欢运行一个节目,但它肯定不是唯一的方式,每种方式都有自己的能力和限制,可能会或可能不适用于特定的工作流程。
因此,不要尝试自己想出用户可能想要做的所有事情,并且不得不说,“我很抱歉,你不能这样做”,很多,我认为这样做会更好。给他们一种图灵完整的编程语言,让他们玩得开心。我也可以给他们一组可复制的源代码,它们可以做一些有用的东西,还有一个“代码向导”,可以信任它来创建至少可以编译的东西,但是我的愿景是让每个知识渊博的用户创建他们的自己的工具,以便应用程序以他们想要的方式工作:
预设的场景可能使用内置函数而无需用户编程,但其余部分是一个空白的画布,我无法看到它的方法。
我现在的版本有一个字节码解释器,它运行一个自定义指令集,类似于我对x86设计用于手动优化组装的理解,并且受到一些其他面向新手的语言的激励,这些语言让我感到自定义解释程序集。但是因为(当然)我的发明没有现有的工具链,所以我必须编写自己的工具,结果证明是很多复杂的GUI工作。我得到了(大部分?)其中的错误,但它总是一团糟:大约一半的源代码是仅用于鼠标的编辑器,几乎无法使用,当我尝试时,解释器似乎陷入困境用它做很多事。 (我没有计算每个解释指令的原生指令,但它绝对是很多!)
所以我想知道使用Basic
,C
,C++
,Python
,或其他已经有一个像样的工具链的东西,并将其纳入我的应用程序代替我自己的黑客。开发环境似乎是应用程序的一部分 - 或者它实际上是,没有任何明显的外部工具 - 但仍然使用现有的,成熟的工具链。
从用户的角度来看,目标是:
我看到的挑战是:
Audio_Analyzer[channel][band]
(静态,只读)
MIDI_Velocity[channel][note]
(静态,只读)
Physical_Controls["name"]
(由发现,读/写:电动推子,点亮按钮等组成)
Fixtures["name"].Features["name"]
(用户创建/删除/修改随时,读/写,大多数灯具包括他们自己的编程,以将功能转换为DMX)
DMX_In[universe][channel]
(用户可调整的宇宙计数,静态通道数,只读)
DMX_Out[universe][channel]
(用户可调整的宇宙计数,静态通道数,读/写)
等等。所以...除了有目的地执行任意代码的明显安全问题(不要以root身份运行)之外,我还有什么样的雷区?什么是实现目标的好方法?
到目前为止,我的开发环境是C++
上的Qt
和Lubuntu (x64)
,但我也希望下一个版本也可以在Raspbian (armhf)
上运行。 (覆盆子皮)
模糊而且非常广泛,但仍然让我试着回答。根据您对性能的支持以及对工具链或库的支持,您可以查看PyQt(Qt的Python绑定)库。使用pyqt可能证明是有益的,因为你对所传递的对象进行了所有精细控制(Python使得操作/转换/修改对象变得有意义的输出对象变得很有趣),并且由于Qt和C ++的存在,你仍然具有性能。 PyQt有一个活跃的社区,并渴望帮助解决任何问题/错误。