Graphviz 7
gitlab.com
gitlab.com
It's very powerful! Not every organisation can bring up an entire environment with one command of documentation their infrastructure with Graphviz.
Here is a executable diagram of a build worker cloud nodes, Kubernetes, consul, vault, Debian package server, Java app, SSH bastion, Prometheus, grafana, DNS and security groups.
https://github.com/samsquire/mazzle/blob/master/docs/archite...
The tool also parallelises the build based on the graph so for example packer builds can run in parallel.
It also has a GUI but as a tool it's not ready for other people to use.
Yes I would love to hear other people's solutions to DevOps problems. I find it an interesting space. There's lots of good ideas but they haven't been brought together.
I created an analysis compiler that takes intent information and makes it part of the Enterprise DevSecOps pipeline in order to share realtime analysis with the entire organization. As I continued that work, I've also started talking about the feasibility of creating a supercompiler.
GraphViz is the shit, man. It was exactly what I needed to work on this material. You can create your own notation and then couple it with all kinds of tech by way of batch. Highly recommended.*
*The hardest part, frankly, was unlearning all of the other diagramming paradigms I've used. YMMV, but I found GraphViz most useful when you're going completely greenfield.
One of my ideas is a supercomputer compiler
I wrote about it here
https://github.com/samsquire/ideas4#112-compiler-as-a-servic...
Application performance monitoring, scheduling, control loops ala Kubernetes, parallelism, multithreading, data scheduling (shifting and sharing data to where it needs to be used), advanced caching and regeneration and container scheduling and binpacking and data layout scheduling could all be compiled by a supercompiler for extreme performance.
https://danielbmarkham.com/outlines-of-a-supercompiler-in-f/
Our industry tends to over-complicate things and get in its own way of making the world a better place. SuperCompilers are a worthwhile effort to fix that. We need more forces for good. Kudos.
What does this mean?
2. There are about 20 keywords. They are represented as ALL CAPS
3. When you take notes, you tag them with the keywords
4. These notes are checked into git like everything else, and built as part of the dev/team/pmo/enterprise DevSecOps pipeline
5. Doing this creates a realtime and ever-changing analysis model
This leads to better conversations, better questions, elimination of duplication and conflicting business ideas, entry of data once, tracking bugs and features in plain language all of the stakeholders can understand, automated testing frameworks, interactive diagrams showing what the business thinks the world looks like and how they're products will change it, and more.
It was fun trying to design the simplest system possible able to map the almost endless complexity of human interactions around a given domain. tl;dr "Intent" is everything that happens between humans to organize their view of the world and the tech they're making to interact with it. Intent begins with brainstorming, perhaps BS sessions with coders, marketers, customers, and so forth and ends with feature tests, user manuals, and everything but the code itself.
Using a db gives you a better way of modifying meta data in batches which might be required at scale. It also makes it possible for tooling to query stuff quickly and do operations such as setting consul intentions, register something in an api gateway or other surrounding config tasks.
The pipelines we built checked out complete subgraphs from an api and generated json that referenced versioned TF modules and committed these to a service repo.
Thought about open-sourcing for a long time but never could get the go from legal. :(
This is very cool though!
edit: according to this[3] discussion , Microsoft uses .dot. I then found this wiki[4] page that supports the claim. dot is used by Microsoft Word document template files. I will switch to .gv
[1] https://en.wikipedia.org/wiki/Gzip
[2] https://en.wikipedia.org/wiki/DOT_(graph_description_languag...
[3] https://forum.graphviz.org/t/what-is-the-file-extension-for-...
[4] https://en.wikipedia.org/wiki/List_of_filename_extensions_(A... [4]
.doc = document, .dot = document template.
From 3.0.0 to 7.0.0 just during this year, though.. ? I guess very few are depending on the library interfaces which I imagine are being broken, or do the major version increments just signify nothing of importance?-)
After all, it took (at least) 21 years to get from 0 to 3.0.0
There's absolutely no reason for 2 major bumps 11 days apart.
That means you need to postpone the breaking changes for a while, kind of bunching them together. Many projects do that, but it also incurs some cost.
> After all, it took (at least) 21 years to get from 0 to 3.0.0
It's possible that they did not implement semantic changes in the strict sense before and included small breaking changes into non-major releases (I think a lot of software does this). Fast changes of version numbers may just mean they started reflecting each small BC break into the version number.
I don't know when semantic versioning was invented, but it only became prominent in the last decade. Graphviz is from the 90s.
Still, it's great to see new maintainers with bold ideas.
“The version number conveys whether there is a breaking change” seems more important than “the version number remains small”, so while the second half may be true, I don’t see how that supports the first half at all.
Is version 465 very different from version 464 though?
I have to admit, I haven’t found a more formal programmatic tool. Ultimately I have to turn to “by hand” tools if I want something more complicated. If you can’t translate that last statement, it means I just never do anything more complicated.
Example at https://dev.azure.com/itmv/Coffee%20Shop/_wiki/wikis/Coffee-...
Project at https://github.com/Calpano/featdoc
Disclosure: I maintain this project
What plantuml lacks (maybe mermaid less so) could really only be improved upon by working with raw svg I think. There is a LaTex package tikz that offer much more flexibility than plantuml/mermaid, but you still run into limitations in that diagram features are predefined.
1. It provides a convenient DSL targeting specific diagram use-cases that I actually want (generally sequence diagrams.)
2. The "source code" for the diagram is trivial to check in and diff with version-control, sometimes right along with the code it describes.
3. If the app/renderer is for some reason not available, the source is clear enough that you aren't completely lost.
I hadn't heard of Mermaid before this conversation, but it seems to hit some of the same notes.
The creator of PlantUML is working on translating graphviz into a native form to eliminate the dependency for PlantUML use. Once this has been done, it would open up even a whole new world of possibilities (graphviz does allow a bit more specification of element locations).
More generally I've added it to Newt [1], which is my in-progress C# code generator. It scans a PostgreSQL database to automatically generate a class library with models and EF Core data contexts.
As part of that it writes out a dot notation Graphviz source file for showing the tables and relationships. The repo includes an example image [2] - it only shows a couple of tables, but it gives an idea of what can be produced (and also shows the .dot source file that was created to produce it).
[1] https://github.com/kcartlidge/Newt
[2] https://github.com/kcartlidge/Newt#created-graphviz
Edit: If anyone does C and has skills or money available (I don't) the Graphviz README says "This project has only 3 of its founders remaining as volunteer maintainers, and support is limited and may end soon. If you can help fund to a more formal foundation to continue this project, please contact north on graphviz org."
For OSS graph visualization libraries, check out: - Sigma.js - Vis.js
For commercial options: - Ogma (disclosure: my company builds that one) - KeyLines
Maybe helpful, more for visual graph data analysis than say arch diagramming: we build Graphistry specifically for interactively analyzing more data than these tools, eg, GPU client + GPU server, and being more batteries-included. The free Graphistry Hub site is similar to diagrams.net and GitHub for folks who aren't self-hosting GPUs.
We are still working towards OSS'ing the core renderer, but all our new graph neural networks + graph compute + graph layout layers are all already OSS-first (see PyGraphistry), and we are part of the apache arrow + rapids communities. If your kind of thing, we are very much hiring :)
Having used Graphviz extensively over the years as well, the cost of yFiles is certainly unfortunate, but I guess we simply serve a different markt segment than Graphviz or D3. (On a somewhat related note: Our online graph editor, yEd Live, support parsing a subset of Graphviz' syntax and that enables running at least some yFiles layout algorithms on Graphviz graphs. No export back, though.)
I've used it to map wireless trading networks with lots of connections.
The fact that you can make the nodes clickable to other webpages etc is a great feature for building "drill down" views.
Which tool do you people use most often for graph visualization? I kind of linger between networkx, Gephi, graphviz and d3.
I'm really in the market for a decent engine that's both easy to use and enables high quality interactive exploration of massive datasets. Plotly comes close, but struggles with larger datasets and is still a bit fiddly. I'd love to be able to lob a large structure into a UI and share with colleagues, and they'd be able to visualise and filter based on node/edge metadata, time series etc.
Something like Gephi, but web-based and considerably easier to use.
Can be used code-free (drop in a csv or log file) or via analysis workflows like from Jupyter notebooks and internal dashboards.
We are roughly parity for Gephi's features, and pushing (far) ahead on web, GPU, perf, ai, automation, etc. Always curious about gaps - our Slack is a good place to chat on that.
Because one of the points of GraphViz is text input, which can be easily source-controlled, diffed, machine-generated, etc.
https://support.omnigroup.com/doc-assets//OmniGraffle-Mac/Om...
That said, the ability to "fix" the location of some items by providing it in the dot file is a feature most folks seem to ignore. Or not know exists.
Probably saved me a ton of time that I would spend on implementing visualization myself
img: https://imgur.com/7qCKA1G code: https://github.com/hammeiam/saddle-data-graph/blob/master/Sa...
Example: a server has an IP address, dns entries, a description, and some other fields, and it connects to other servers. Is all of that meta information in a JSON object in the key-value area of the node in the .dot file?
The output was quite messy.
I don't really know for to give clues to it, I tried several options.
"This project has only 3 of its founders remaining as volunteer maintainers, and support is limited and may end soon. If you can help fund to a more formal foundation to continue this project, please contact north on graphviz org."
The community should applaud the efforts of Magnus Jacobsson, Mark Hansen, Matthew Fernandez, Steve Roush, and recently Costa Shulyupin to support graphviz in a more disciplined and professional way. In hindsight, we got a lot of play by treating Graphviz as a research vehicle, but we weren't able to (or didn't choose to) direct a lot of effort into documentation, rewriting existing code, sorting out feature interaction, developing very polished front ends, or broadening the scope of the effort. Or finding a new home after AT&T Labs lost its enthusiasm.