Editor di nodi e programmazione visuale
Gli editor di nodi sono di gran moda soprattutto nelle pipeline di elaborazione delle immagini e nella programmazione degli shader nei motori di gioco. Ad esempio, ecco una domanda su stackoverflow sull'implementazione di un editor di nodi simile a Blender per Python. Appaiono anche nella scienza dei dati, come KNIME e Orange .
Mi chiedo se Mathematica trarrebbe vantaggio da un editor di nodi in alcuni casi. Mi sono precipitato a creare qualcosa di visivamente simile, ma ci sono molte stranezze nella grafica di Mathematica e ci sono anche altre cose da considerare come le strutture dati da usare per i nodi e le connessioni. Poi c'è il problema di poter spostare dinamicamente i nodi e trascinare i nodi, estendere le connessioni / eliminare le connessioni ecc.
- Esistono implementazioni esistenti? In caso contrario, esiste un modo per creare un sistema più regolabile dinamicamente
Graphe "eseguirlo"? Possiamo ottenereTreeForm[Plus[Times[x, y], z]]per esempio, ma come possiamo costruire quel grafico in un modo drag-and-drop? - Vale la pena proseguire in Mathematica o sarebbe meglio implementarlo in Python, compilare il grafico in espressioni Mathematica e chiamare tramite la libreria client?
Risposte
Esistono implementazioni esistenti?
Ci sono due implementazioni che mi vengono in mente.
- VisX (presentato su Wolfram Community qui )
- Implementazione di Scratch Blocks
Il primo è stato "in sviluppo" da molto tempo ormai, e non è ancora stato rilasciato, ma potrebbe valere la pena dare un'occhiata a qualcuno che ha intrapreso questa strada.
Vale la pena proseguire in Mathematica o sarebbe meglio implementarlo in Python, compilare il grafico in espressioni Mathematica e chiamare tramite la libreria client?
La mia opinione personale è che sarebbe meglio implementare un'interfaccia visiva come ad esempio un'app Electron , che potrebbe funzionare su Wolfram Engine. L'introduzione di una dipendenza dall'interfaccia del notebook non sembra molto vantaggiosa, ma alla fine dipende tutto dalle tecnologie con cui si desidera lavorare.