La arquitectura de gráfico de nodo es un diseño de software estructurado en torno a la noción de un gráfico de nodo . Tanto el código fuente como la interfaz de usuario están diseñados en torno a la edición y composición (o vinculación) de unidades funcionales atómicas.
El código fuente de la aplicación de software está organizado en unidades funcionales atómicas llamadas nodos. Esto generalmente se hace usando clases derivadas de una clase base para todos los nodos. Cada nodo puede tener entradas y salidas, que normalmente también se implementan utilizando clases derivadas de clases base para todas las entradas y todas las salidas. Las salidas y las entradas pueden referirse entre sí, normalmente manteniendo punteros a instancias de otras salidas o entradas. Cuando un nodo ejecuta su funcionalidad, recupera sus entradas siguiendo los punterosalmacenados en sus entradas para recuperar datos de salida de otros nodos. El nodo luego ejecuta su operación en estas entradas para producir sus propias salidas. La capacidad de vincular nodos de esta manera permite dividir las tareas o problemas complejos en unidades nodales atómicas que son más fáciles de entender.
La interfaz de usuario de la aplicación de software a menudo mostrará visualmente el gráfico de nodo al usuario. Esto a menudo se logra mediante el uso de la GPU para realizar el renderizado que posteriormente se muestra en el escritorio al usuario. Las API comunes para la GPU son OpenGL y DirectX . Los nodos a menudo se dibujan como rectángulos y las conexiones entre nodos se dibujan con líneas o splines.
El uso de la arquitectura de gráficos de nodos comenzó en la década de 1960. Hoy en día, el uso de gráficos de nodos se ha disparado. Los campos de gráficos, juegos y aprendizaje automático son los principales adoptantes de este diseño de software con la mayoría de las herramientas que utilizan la arquitectura de gráficos de nodos.
Hasta el día de hoy, existe cierto debate sobre los beneficios de la programación visual y la arquitectura de gráficos de nodos. Los defensores destacan cómo la abstracción que proporcionan los gráficos de nodos hace que la herramienta sea más fácil de usar. Los críticos destacan cómo la programación visual es demasiado restrictiva y cómo deben recurrir a modificar el código fuente o los scripts para realizar sus tareas.
Historia
Eric Hosick realiza un esfuerzo continuo en Twitter para recopilar instantáneas de todas las interfaces de usuario de gráficos de nodos en la mayoría de las aplicaciones de software . El esfuerzo intenta documentar la evolución y explosión de las interfaces de usuario de gráficos de nodos a partir de sus raíces iniciales. Este historial visual está alojado en una página de blog llamada Lenguajes de programación visual: instantáneas . El trabajo que condujo a las arquitecturas de gráficos de nodos y la programación visual parece haber comenzado en la década de 1960, en el área conocida como "comunicaciones hombre-máquina".
En la tesis del MIT de William Robert Sutherland (1966) "Especificación gráfica de procedimientos en línea" , describe y analiza temas en torno a un lenguaje pictórico 2D. Esta es una de las primeras investigaciones en programas o flujos de trabajo basados en flujos de datos . Desde entonces, su tesis se ha utilizado como "técnica anterior" para anular las demandas sobre las ideas de flujo de datos en la actualidad. A menudo se piensa que su trabajo abrió el camino hacia lo que hoy se conoce como diseño asistido por computadora (CAD) .
- Un programa pictórico es una forma natural de expresar procesos paralelos. La naturaleza bidimensional del lenguaje ayuda a visualizar muchas cosas que suceden a la vez. [1]
- La facilidad de depurar programas, particularmente los paralelos, se verá reforzada por una forma de lenguaje pictórico. Poder adjuntar sondas de datos y ver la ejecución de un programa le da a uno una comprensión de los detalles que es difícil de obtener de otra manera. [1]
- La ejecución de un programa no necesita estar controlada por las convenciones habituales de flujo secuencial explícito. El movimiento de datos a través de un programa puede determinar su funcionamiento. Una convención controlada por datos se corresponde estrechamente con nuestras ideas intuitivas de cómo debería funcionar un programa gráfico y también permite la programación en paralelo sin designaciones de flujo explícitas. [1]
En 1969, TO Ellis, JF Heafner y WL Sibley publicaron un artículo sobre un lenguaje de entrada gráfica (GRAIL) . Su trabajo estaba relacionado con la tableta RAND, que comenzó con una investigación sobre Sketchpad , un sistema en el que los usuarios podían escribir comandos de computadora directamente en una tableta, realizada por Ivan Sutherland . El sistema GRAIL utilizaba un lenguaje de programación gráfico basado en diagramas de flujo y podía reconocer letras y gestos escritos a mano. [2] Alan Kay ha dado varias demostraciones del sistema GRAIL , sin embargo, no participó en la creación del sistema.
- Los conceptos organizacionales importantes en el sistema GRAIL son el flujo secuencial de control, la jerarquía de subrutinas y el lenguaje (diagramas de flujo) para relacionar pictóricamente la organización dentro de los conceptos de los dos primeros. [2]
- La naturaleza secuencial del control permite al hombre visualizar procesos aislados que se adaptan a funciones específicas, lo que, a su vez, permite al organizador pensar en el programa total en términos de subpartes manejables. [2]
- La jerarquía de subrutinas enfatiza aún más la noción de procesos aislados. [2]
- Los diagramas de flujo ayudan al hombre a visualizar sus opciones de control y la relación entre procesos al expresar estas interrelaciones en dos dimensiones. [2]
Algunos de los usos más recientes de las arquitecturas de gráficos de nodos comenzaron alrededor de 2005. Los gráficos de nodos en este marco de tiempo comienzan a desarrollar paradigmas para lidiar con la complejidad en el gráfico de nodos. La complejidad surgió a medida que aumentaba el número de nodos y enlaces en el gráfico. Una de las principales ideas relacionadas con la complejidad fue el concepto de grupo o nodo de paquete que ocultaba nodos dentro de sí mismo, exponiendo únicamente las entradas y salidas del grupo.
- Katana, Fundición
- Houdini, SideFX
- Nuke, Fundición
- Mari, Fundición
- Maya, Autodesk
- Licuadora
Abstracción y complejidad
En el artículo Hierarchical Small Worlds in Software Architecture [3], el autor Sergi Valverde sostiene que la mayoría de los grandes sistemas de software se construyen de forma modular y jerárquica, y que los gráficos de nodos pueden usarse para analizar grandes sistemas de software. Muchos otros artículos de análisis de software a menudo utilizan gráficos de nodos para analizar grandes sistemas de software, lo que sugiere que los gráficos de nodos son buenos modelos de la estructura interna y el funcionamiento del software. [4]
Debate sobre programación visual
Los gráficos de nodo son un subconjunto de la clase más amplia de lenguajes de programación visual . Los gráficos de nodo le permiten diseñar programas de una manera visual y estructurada en lugar de a través de la creación del código fuente . En las industrias del cine y los videojuegos, los gráficos de nodos son sinónimo de programación visual. Actualmente existe cierto debate sobre el poder, la abstracción y la necesidad de los gráficos de nodos y los lenguajes de programación visual.
- Los defensores de la programación visual generalmente enfatizan cómo simplifica la programación porque abstrae muchos detalles y solo expone los controles que son necesarios para su dominio. [5] Estos controles son los parámetros de los nodos que controlan su comportamiento y los vínculos entre los nodos.
- Los críticos de la programación visual generalmente enfatizan cómo no ofrece suficiente control y cómo para tareas más complejas se vuelve necesario crear el código fuente . [6] Sin embargo, estas tareas más complejas a menudo quedan fuera del uso o dominio previsto del gráfico de nodos.
Esta sigue siendo un área de debate activa con nuevas discusiones que ocurren en foros abiertos hasta el día de hoy. Las siguientes son algunas de las discusiones más importantes hasta la fecha.
- Discusión sobre Hacker News, 2014
- Discusión sobre Hacker News, 2019
- Discusión de Reddit, 2019
Los estudios de investigación tienden a arrojar más detalles sobre estas discusiones y resaltan más las ventajas y desventajas de los gráficos de nodos. Indican que los gráficos de nodos y la programación visual son fáciles de entender para los nuevos usuarios, pero a medida que los usuarios pasan a tareas más complejas, a menudo necesitan recurrir a la creación de código fuente textual . [7] Otra encuesta se centra en las creencias de las personas sobre los efectos cognitivos de la programación visual, en la que encontraron que los programadores profesionales son los más escépticos de la programación visual. [8] Otros estudios han demostrado en experimentos psicológicos que la programación visual puede tener efectos positivos significativos sobre el desempeño en tareas cognitivas. [9]
Gráfico de nodo
Un gráfico de nodos en el contexto de la arquitectura de software se refiere a una organización de la funcionalidad del software en unidades atómicas conocidas como nodos, y donde los nodos pueden conectarse entre sí a través de enlaces. La manipulación de nodos y enlaces en el gráfico de nodos a menudo se puede lograr a través de una API programable o mediante una interfaz visual usando el mouse . En el diagrama anterior, el gráfico de nodo aparece en el lado derecho.
En el uso moderno, el término "gráfico de nodo" es una palabra compuesta abierta. Sin embargo, en el software más antiguo se lo denominaba "gráfico de nodo", una palabra compuesta cerrada.
- Nodegraph, software de válvulas
- Nodegraph, Notch
Nodo
Los nodos realizan algún tipo de cálculo. Encapsulan esta funcionalidad ejecutable y, a menudo, toman entradas y producen salidas como subproducto de la ejecución . Un ejemplo simple es un nodo que suma dos números. Las entradas son los dos números para sumar y la salida es la suma de los dos números.
Los nodos son análogos a las funciones matemáticas de la siguiente forma.
dónde es el cálculo del nodo, es un vector de los valores de entrada del nodo y es un vector de los valores de salida del nodo.
Visualmente, los nodos a menudo se representan mediante rectángulos. Sin embargo, esta no es una convención que se siga en todas las aplicaciones. En el diagrama de arriba hay tres nodos etiquetados como "Video", "Agregar estrella" y "Agregar círculo".
Parámetros de nodo
Los nodos suelen tener parámetros adicionales que definen su ejecución . Estos parámetros están respaldados por tipos de datos en el código fuente del nodo .
Matemáticamente, se pueden considerar como valores de entrada adicionales a la función de cálculo del nodo. La única diferencia es que estos valores son controlados directamente por el usuario en lugar de ser generados por otro nodo como subproducto de su ejecución . Por ejemplo, en el ejemplo simple anterior con respecto a un nodo que agrega dos números, podemos introducir un parámetro de sesgo en el nodo para que el nodo pueda agregar un número fijo adicional a la suma.
Visualmente, los parámetros del nodo a menudo se exponen después de que el usuario hace clic en el nodo. Esto ayuda a reducir el desorden visual del gráfico de nodos. En el diagrama de arriba vemos una ventana de parámetros que se abre al lado del nodo "Agregar estrella".
Entradas y salidas de nodo
Los nodos a menudo tienen entradas y salidas, como se discutió anteriormente. Las entradas y salidas están respaldadas por tipos de datos en el código fuente del nodo . Las entradas y salidas son cruciales para almacenar valores antes y después de la ejecución del nodo .
Matemáticamente, las entradas y salidas del nodo son análogas a los valores de entrada y salida de las funciones.
dónde es el cálculo del nodo, es un vector de los valores de entrada del nodo y es un vector de los valores de salida del nodo.
Visualmente, las entradas y salidas de los nodos a menudo se representan con círculos.
Enlaces de nodo
Los enlaces transfieren los valores almacenados en tipos de datos entre diferentes nodos. Son análogos a la composición matemática. Por ejemplo, si el nodo A envía sus salidas al nodo B, esto se puede representar matemáticamente de la siguiente manera.
dónde y son las operaciones realizadas por el nodo B y el nodo A, es un vector de los valores de entrada del nodo A y es un vector de los valores de salida del nodo B.
Tipos de nodo
El tipo de nodo indica qué operación de cálculo realizará cuando se ejecute . A menudo, hay muchos tipos de nodos diferentes que participan en el gráfico de nodos. Los siguientes son algunos ejemplos:
- Nuke , un popular programa de composición de efectos visuales , incluye cientos de nodos. [10] cada uno realizando tareas específicas relacionadas con la composición.
- Katana, un software de iluminación y apariencia popular, incluye cientos de nodos. [11] cada uno realizando tareas específicas relacionadas con la iluminación de escenas de gráficos por computadora.
- Mari, un popular software de pintura en 3D, incluye cientos de nodos. [12] cada uno realizando tareas específicas relacionadas con la pintura en 3D.
El tipo de nodo más importante para gestionar la complejidad es el nodo de grupo. Este tipo de nodo no ejecuta código de software al igual que otros nodos. Este nodo simplemente agrupa un subconjunto de nodos conectados y administra las entradas y salidas dentro o fuera del grupo. Esto oculta la complejidad dentro de los nodos del grupo y limita su acoplamiento con otros nodos fuera del grupo. Esto conduce a una jerarquía en la que se incrustan gráficos más pequeños en nodos de grupo. Los siguientes son ejemplos de nodos de grupo que se utilizan para agrupar un subconjunto de nodos conectados y para ayudar a simplificar el gráfico.
- Agrupar nodos en Nuke. [13]
- Agrupar nodos en Katana. [14]
Interfaz de usuario
Las aplicaciones de software que utilizan la arquitectura de gráficos de nodos normalmente expondrán el gráfico de nodos de forma visual o gráfica al usuario, lo que le permitirá realizar cambios en el gráfico de nodos. Con el mouse , los usuarios normalmente podrán:
- crear nuevos nodos
- editar parámetros en nodos
- conectar nodos juntos
- evaluar el gráfico hasta un cierto nodo
- ver los valores de salida actuales en los nodos
Con el uso cada vez mayor de gráficos de nodos, actualmente se presta más atención a la creación de interfaces fáciles de usar. A menudo, estas nuevas interfaces están siendo diseñadas por especialistas en interfaces de usuario y diseñadores gráficos. Las siguientes son algunas interfaces de usuario diseñadas por artistas y diseñadores.
- Gráficos de nodo en Dribble
- Nodos en regate
Gráficos acíclicos dirigidos
Muchos resultados teóricos de la teoría de grafos se aplican a los grafos de nodos, especialmente con respecto a la topología . Esta área temática en la que los nodos se vinculan entre sí para formar gráficos está bien estudiada.
Un área particular de preocupación durante la evaluación de gráficos de nodos son los ciclos . Cuando los ciclos están presentes en el gráfico de nodos, la evaluación nunca termina, ya que los nodos se ejecutan continuamente mediante los siguientes enlaces. Para evitar estos problemas, muchas arquitecturas de gráficos de nodos se limitan a un subconjunto de gráficos conocidos como gráficos acíclicos dirigidos .
Uso en gráficos por computadora
El uso de la arquitectura de gráficos de nodos en el diseño de software es especialmente popular en las industrias del cine y los videojuegos . El diagrama de arriba muestra una interfaz de usuario simplificada para una herramienta artística para editar y crear videos. Los nodos se representan como rectángulos y están conectados entre sí a través de líneas curvas ( curvas de Bezier ). En el modelo operativo de este software, se pasa una secuencia de video a través de las líneas hasta el siguiente nodo, y cada nodo realiza algunas modificaciones adicionales a la secuencia de video. En este ejemplo, un video se traduce en 2D, otro se pixela y, finalmente, ambas transmisiones se fusionan.
Los siguientes son algunos ejemplos de software que utiliza la arquitectura de gráficos de nodos en las industrias del cine y los videojuegos .
- Katana, Fundición
- Houdini, SideFX
- Nuke, Fundición
- Mari, Fundición
- Maya, Autodesk
- Licuadora
Uso en aprendizaje automático
El uso de la arquitectura de gráficos de nodos en el diseño de software se ha vuelto muy popular recientemente en las aplicaciones de aprendizaje automático . El diagrama anterior muestra una red neuronal simple compuesta por 3 capas. Las 3 capas son la capa de entrada, la capa oculta y la capa de salida. Los elementos de cada capa son pesos y están conectados a pesos en otras capas. Durante la inferencia, el algoritmo de aprendizaje automático evalúa los pesos en la capa de salida a través de una secuencia de evaluaciones funcionales sobre los pesos de las capas anteriores. Durante el entrenamiento, el algoritmo de aprendizaje automático utiliza la optimización para minimizar una función de pérdida, donde la función de pérdida depende de la diferencia entre los pesos en la capa de salida y los valores esperados. Los gráficos de nodo se utilizan para visualizar, configurar y depurar estas capas de redes neuronales.
Los siguientes son ejemplos de software de aprendizaje automático que utilizan una arquitectura de gráficos de nodos sin una interfaz gráfica para los gráficos de nodos.
- PyTorch, GitHub, Facebook
- TensorFlow, GitHub, Google
A continuación, se muestran algunos ejemplos de software de aprendizaje automático que utiliza la arquitectura de gráficos de nodos .
- PerceptiLabs, KDnuggets
- Deep Cognition, Deep Congition Inc
- Modelador de redes neuronales, IBM
- Consola de red neuronal, Sony
- Dígitos, nVIDIA
Notas
- ^ a b c "La especificación gráfica en línea de los procedimientos informáticos" . hdl : 1721.1 / 13474? show = full .
- ^ a b c d e "Lenguaje de entrada gráfica GRAIL" (PDF) .
- ^ Valverde, Sergi; Sole, Ricard V. (11 de julio de 2003). "Pequeños mundos jerárquicos en arquitectura de software". arXiv : cond-mat / 0307278 .
- ^ "Representación y Análisis de Software". CiteSeerX 10.1.1.394.4865 . Cite journal requiere
|journal=
( ayuda ) - ^ "La programación visual no apesta" .
- ^ "Programación visual: por qué es una mala idea" .
- ^ "Fortalezas y debilidades de un lenguaje de programación visual en un contexto de aprendizaje con niños" (PDF) .
- ^ "Programación visual: la mirada desde la academia y la industria" . doi : 10.1145 / 266399.266415 . S2CID 18983760 . Cite journal requiere
|journal=
( ayuda ) - ^ Blackwell, AF (1996). "Teorías metacognitivas de la programación visual: ¿qué creemos que estamos haciendo?" . Proceedings 1996 IEEE Symposium on Visual Languages . págs. 240–246. doi : 10.1109 / VL.1996.545293 . ISBN 0-8186-7508-X. S2CID 36822160 .
- ^ "Guía de referencia nuclear" . learn.foundry.com . Consultado el 21 de diciembre de 2020 .
- ^ "Guía de referencia de Katana" . learn.foundry.com . Consultado el 21 de diciembre de 2020 .
- ^ "Guía de referencia de Mari" . learn.foundry.com . Consultado el 21 de diciembre de 2020 .
- ^ "Nuke: agrupación de nodos con el nodo de grupo" . learn.foundry.com . Consultado el 21 de diciembre de 2020 .
- ^ "Katana: agrupación de nodos" . learn.foundry.com . Consultado el 21 de diciembre de 2020 .
Referencias
- Métricas de cambios en la arquitectura de software según la distancia estructural
- Representación y análisis de software
- "Gramática de gramática y resolución de restricciones para estilos de arquitectura de software". 1998: 69–72. CiteSeerX 10.1.1.108.9362 . Cite journal requiere
|journal=
( ayuda ) - "Aplicación de la teoría de grafos en informática e ingeniería". 2014: 1–4. CiteSeerX 10.1.1.800.2735 . Cite journal requiere
|journal=
( ayuda ) - "Implementación de un diccionario inverso, basado en definiciones de palabras, utilizando una Arquitectura Node-Graph" (PDF) . Cite journal requiere
|journal=
( ayuda ) - "Representación y Análisis de Software". CiteSeerX 10.1.1.394.4865 . Cite journal requiere
|journal=
( ayuda ) - Una historia de la programación visual: de lo básico a la burbuja
- Software Scratch
- Software Blockly
- Que es la programación visual