- Es una herramienta para escribir diagramas UML como si fueran código; al modificar la gramática de texto de la izquierda, el diagrama renderizado cambia al mismo tiempo
- Soporta varios elementos de diagrama y notaciones de relaciones, como clases, componentes, flujogramas, casos de uso y bases de datos·tablas
- El contenido editado se guarda en el localStorage del navegador y puede permanecer para la próxima visita, aunque no se garantiza el guardado
- El lienzo puede moverse y hacer zoom con arrastre y scroll en el tercio derecho del área, y el editor soporta parte del mapeo de teclas de Sublime Text
- Con las directivas
#y las directivas de estilo.se pueden ajustar fuente, dirección, espaciado, colores, forma de líneas y estilos de clasificadores personalizados
Diagramas construidos con una gramática de texto
- Nomnoml es una herramienta para escribir y renderizar diagramas con una gramática basada en texto
-
Notación de relaciones
- Se pueden usar association, dependency, generalization, implementation, composition, aggregation, ball and socket, note, hidden y otros
- Ejemplo:
[Car]->[Engine] - Ejemplo:
[Car] +-> 0..* [RustPatch] - Ejemplo:
[Car]o->[Manufacturer] - Ejemplo:
[Car]<:-[Pickup]
-
Clasificadores soportados
- En diagramas de clases, además de la clase básica, se soportan
abstract,instance,reference,package,frame - En diagramas de componentes se pueden usar las notaciones
socketylollipop - Como elementos de flujograma están
start,end,state,choice,sync,input,sender,receiver,transceiver - Los diagramas de casos de uso soportan
actoryusecase - Como otros elementos se pueden usar
note,label,hidden,database,pipe,table- Un ejemplo de tabla tiene la forma
[<table>Fruits| Apples | 17 || Oranges | 4711]
- Un ejemplo de tabla tiene la forma
- En diagramas de clases, además de la clase básica, se soportan
Edición, directivas y estilos
//al inicio de una línea se trata como comentario//en medio de una línea, como en[not //commented], no es un comentario
- Si se usa el atributo
id, dos nodos con el mismo nombre visible pueden convertirse en nodos distintos- Ejemplo:
[<actor id=a>User],[<actor id=b>User],[a] -- [b]
- Ejemplo:
-
Ajuste de layout y renderizado con directivas
##import: filename#direction: down | right#edges: hard | rounded#background: transparent#font,#fontSize,#spacing,#padding,#stroke,#fill,#zoom#ranker: network-simplex | tight-tree | longest-path
-
Definición de estilos de clasificadores con directivas
.- Ejemplo:
#.box: fill=#8f8 dashed - Ejemplo:
#.blob: visual=ellipse title=bold - Se pueden usar claves/valores como
fill,stroke,align,direction,visual - Es posible especificar estilos de texto para el título y el cuerpo, como
title=left,italic,boldybody=center,italic,bold - Los ejemplos de uso incluyen cambio de fuente, layout compacto, creación de tablas, estilos personalizados y división en varios archivos
- Para dividir en varios archivos se usa una forma como
#import: blobby_styles - Los cambios en la pantalla de edición se guardan en el localStorage del navegador, y el lienzo puede moverse y hacer zoom con arrastre y scroll en el tercio derecho del área
- El editor soporta parte del mapeo de teclas de Sublime Text, y Nomnoml está alojado en GitHub
- Ejemplo:
1 comentarios
Opiniones en Hacker News
Enlace de GitHub: https://github.com/skanaar/nomnoml
Al principio me pareció bastante confuso, y recién lo entendí después de encontrar el botón about
Tal vez he tenido suerte en la vida por no reconocer UML a primera vista. Al principio pensé que estaba explicando algo como una sintaxis falsa de habla pirata
Me parece mucho mejor un enfoque como este, que de vez en cuando reconoce que nadie memoriza 10 tipos de flechas para leer un diagrama UML: https://buck2.build/docs/concepts/concept_map/
Pero muchas herramientas que usan la palabra “UML” son así, y en la práctica a menudo se necesita algo menos preciso y menos verboso que el UML teórico
Antes había un sitio open source que comparaba herramientas para convertir “texto a diagramas”: https://text-to-diagram.com/
nomnoml no está en la lista
[1]: https://d2lang.com/
Me gusta Nomnoml. Últimamente lo estoy usando para visualizar una estructura jerárquica de etiquetas en un proyecto de gestión personal del conocimiento (PKM) basado en navegador en el que estoy trabajando
Suele producir layouts bastante limpios. Ejemplo: https://imgbox.com/9A1mDyNv
Parece que la parte móvil necesita ajustes. Lo abrí en el teléfono y el diagrama se dibujaba encima del editor, así que no podía usar el editor
La biblioteca JavaScript subyacente puede renderizar directamente en un canvas HTML o como SVG desde un programa Node.js, y también se puede ejecutar desde la línea de comandos si quieres
Hace tiempo hice algunas herramientas con nomnoml, incluyendo grafos de flujo de control y grafos de dependencias de código ensamblador de GPU
Me encantó, pero me dio pena no tener una forma confiable de forzar que ciertos elementos quedaran cerca entre sí. En diagramas muy grandes, a veces toma malas decisiones y se vuelve desordenado
Aunque la documentación no está completa, el código es bastante fácil de modificar, así que pude hackearlo para mostrar tooltips al pasar el mouse y para que al hacer clic en ciertos cuadros enlazara a otros diagramas. Se agradece que una herramienta tan buena sea open source
Obtener un buen layout depende demasiado del orden de definición. En diagramas grandes puede volverse difícil de resolver para el usuario, pero en diagramas pequeños se ve bien
Por ejemplo, si escribes el mismo ejemplo pirata en otro orden, sigue siendo válido, pero produce un layout feo
Probé varios de estos productos de diagramas basados en código porque sueño con un mundo donde la documentación técnica, incluidos los diagramas, forme parte del código fuente del proyecto, pero fue difícil obtener layouts aceptables, sobre todo para distribución externa, e incluso para uso interno
Esa frustración normalmente lleva a dos malos resultados: el diagrama se vuelve ilegible o deja de mantenerse
Sinceramente, la idea de hacer code review de la documentación al hacer check-in se acerca bastante a un mito. Los diff de este tipo de documentación son muy difíciles de entender, y es casi imposible verificar de forma significativa si el documento está bien sin renderizarlo y ver el resultado
Es el tipo de problema que realmente quisiera que saliera bien, y tal vez algún día sea un problema resuelto
Si comparas la tabla Pirate original con la tabla Pirate del comentario padre, arriba y abajo quedan invertidos. Aunque definas primero beard y parrot en el orden de visualización deseado, igual salen invertidos
Se ve bien, y parece mucho mejor que los diagramas de clases de PlantUML
[0]: https://plantuml.com/class-diagram
Me recuerda a graphviz