Skip to content

Instantly share code, notes, and snippets.

@eosfor
Created June 18, 2025 09:40
Show Gist options
  • Save eosfor/32346295832ee532fc0bcf1ce80d6f56 to your computer and use it in GitHub Desktop.
Save eosfor/32346295832ee532fc0bcf1ce80d6f56 to your computer and use it in GitHub Desktop.
vegaTransformNotWorking
{
"data": [
{
"name": "node-data",
"values": [
{"name": "https://azazello.darkcity.dev", "group": 1, "index": 0},
{
"name": "https://azazello.darkcity.dev/system-account-report/index2",
"group": 1,
"index": 1
},
{
"name": "https://azazello.darkcity.dev/system-account-report",
"group": 1,
"index": 2
},
{
"name": "https://azazello.darkcity.dev/psrule-and-psquickgraph",
"group": 1,
"index": 3
},
{
"name": "https://azazello.darkcity.dev/agentic-ai-infra-sim",
"group": 1,
"index": 4
},
{
"name": "https://azazello.darkcity.dev/sankey-d3",
"group": 1,
"index": 5
},
{
"name": "https://azazello.darkcity.dev/azure-networking-d3js",
"group": 1,
"index": 6
},
{
"name": "https://azazello.darkcity.dev/no-caf-webapps",
"group": 1,
"index": 7
},
{
"name": "https://azazello.darkcity.dev/aproach-to-optimizing-vm-costs",
"group": 1,
"index": 8
},
{
"name": "https://azazello.darkcity.dev/aks-considerations",
"group": 1,
"index": 9
},
{
"name": "https://azazello.darkcity.dev/observable-on-azure-static",
"group": 1,
"index": 10
},
{
"name": "https://azazello.darkcity.dev/basicvis",
"group": 1,
"index": 11
},
{
"name": "https://azazello.darkcity.dev/using-ipmgmt-more-samples",
"group": 1,
"index": 12
},
{
"name": "https://azazello.darkcity.dev/ipmgmt-module",
"group": 1,
"index": 13
},
{
"name": "https://azazello.darkcity.dev/powershell-graph-sysmon",
"group": 1,
"index": 14
},
{
"name": "https://azazello.darkcity.dev/json-schema-code-generation",
"group": 1,
"index": 15
},
{
"name": "https://azazello.darkcity.dev/nmap-smtp-user-enum",
"group": 1,
"index": 16
},
{
"name": "https://azazello.darkcity.dev/how-to-deal-with-zscaler-and-azcli",
"group": 1,
"index": 17
},
{
"name": "https://azazello.darkcity.dev/graphs-windows-firewall",
"group": 1,
"index": 18
},
{
"name": "https://codespaces.new/eosfor/scripting-notes",
"group": 1,
"index": 19
},
{"name": "https://observablehq.com", "group": 1, "index": 20},
{
"name": "https://github.com/microsoft/PSRule",
"group": 1,
"index": 21
},
{
"name": "https://github.com/Azure/PSRule.Rules.Azure",
"group": 1,
"index": 22
},
{
"name": "https://microsoft.github.io/PSRule/v2/concepts/PSRule/en-US/about_PSRule_Conventions",
"group": 1,
"index": 23
},
{"name": "https://github.com/codespaces/new", "group": 1, "index": 24},
{
"name": "https://github.com/eosfor/scripting-notes/blob/8d0af479302fd43f40b73627d16f72d8a12c7d79/notebooks/en/agentic-ai-infra-simulation/sim.ipynb",
"group": 1,
"index": 25
},
{
"name": "https://azazello.darkcity.dev/index2",
"group": 1,
"index": 26
},
{"name": "https://vega.github.io", "group": 1, "index": 27},
{
"name": "https://docs.microsoft.com/en-us/azure/aks",
"group": 1,
"index": 28
},
{
"name": "https://github.com/Azure/acs-engine",
"group": 1,
"index": 29
},
{"name": "https://www.docker.com", "group": 1, "index": 30},
{
"name": "https://kubernetes.io/docs/concepts/cluster-administration/networking",
"group": 1,
"index": 31
},
{"name": "https://www.youtube.com/watch", "group": 1, "index": 32},
{
"name": "https://github.com/Azure/azure-container-networking/blob/master/docs/cni.md",
"group": 1,
"index": 33
},
{
"name": "https://docs.microsoft.com/en-us/azure/templates/microsoft.containerservice/managedclusters",
"group": 1,
"index": 34
},
{
"name": "https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-forced-tunneling-rm",
"group": 1,
"index": 35
},
{
"name": "https://github.com/Azure/acs-engine/blob/master/docs/clusterdefinition.md",
"group": 1,
"index": 36
},
{
"name": "https://github.com/observablehq/framework",
"group": 1,
"index": 37
},
{
"name": "https://github.com/observablehq/framework-codespace",
"group": 1,
"index": 38
},
{
"name": "https://observablehq.com/framework/data-loaders",
"group": 1,
"index": 39
},
{"name": "https://github.com/microsoft/Oryx", "group": 1, "index": 40},
{
"name": "https://github.com/dotnet/interactive/pull/3671",
"group": 1,
"index": 41
},
{
"name": "https://chromedevtools.github.io/devtools-protocol",
"group": 1,
"index": 42
},
{
"name": "https://github.com/puppeteer/puppeteer",
"group": 1,
"index": 43
},
{
"name": "https://github.com/microsoft/playwright",
"group": 1,
"index": 44
},
{
"name": "https://github.com/BaristaLabs/chrome-dev-tools-generator",
"group": 1,
"index": 45
},
{
"name": "https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/devtools_protocol/browser_protocol.pdl",
"group": 1,
"index": 46
},
{
"name": "https://tonybaloney.github.io/CSnakes",
"group": 1,
"index": 47
},
{"name": "https://handlebarsjs.com", "group": 1, "index": 48},
{"name": "https://vega.github.io/vega", "group": 1, "index": 49},
{"name": "https://github.com/vega/schema", "group": 1, "index": 50},
{"name": "https://quicktype.io", "group": 1, "index": 51},
{
"name": "https://github.com/eosfor/nmap/blob/smtp-enum/scripts/smtp-enum-users.nse",
"group": 1,
"index": 52
},
{
"name": "https://learn.microsoft.com/en-us/cli/azure/use-cli-effectively",
"group": 1,
"index": 53
},
{
"name": "https://technet.microsoft.com/en-us/library/cc947815(v=ws.10).aspx",
"group": 1,
"index": 54
}
]
},
{
"name": "link-data",
"values": [
{"source": 0, "target": 1, "value": 1},
{"source": 0, "target": 2, "value": 1},
{"source": 0, "target": 3, "value": 1},
{"source": 0, "target": 4, "value": 1},
{"source": 0, "target": 5, "value": 1},
{"source": 0, "target": 6, "value": 1},
{"source": 0, "target": 7, "value": 1},
{"source": 0, "target": 8, "value": 1},
{"source": 0, "target": 9, "value": 1},
{"source": 0, "target": 10, "value": 1},
{"source": 0, "target": 11, "value": 1},
{"source": 0, "target": 12, "value": 1},
{"source": 0, "target": 13, "value": 1},
{"source": 0, "target": 14, "value": 1},
{"source": 0, "target": 15, "value": 1},
{"source": 0, "target": 16, "value": 1},
{"source": 0, "target": 17, "value": 1},
{"source": 0, "target": 18, "value": 1},
{"source": 0, "target": 19, "value": 1},
{"source": 0, "target": 20, "value": 1},
{"source": 1, "target": 27, "value": 1},
{"source": 2, "target": 26, "value": 1},
{"source": 3, "target": 21, "value": 1},
{"source": 3, "target": 22, "value": 1},
{"source": 3, "target": 23, "value": 1},
{"source": 3, "target": 24, "value": 1},
{"source": 4, "target": 25, "value": 1},
{"source": 9, "target": 28, "value": 1},
{"source": 9, "target": 29, "value": 1},
{"source": 9, "target": 30, "value": 1},
{"source": 9, "target": 31, "value": 1},
{"source": 9, "target": 32, "value": 1},
{"source": 9, "target": 33, "value": 1},
{"source": 9, "target": 34, "value": 1},
{"source": 9, "target": 35, "value": 1},
{"source": 9, "target": 36, "value": 1},
{"source": 10, "target": 37, "value": 1},
{"source": 10, "target": 38, "value": 1},
{"source": 10, "target": 39, "value": 1},
{"source": 10, "target": 40, "value": 1},
{"source": 11, "target": 41, "value": 1},
{"source": 15, "target": 42, "value": 1},
{"source": 15, "target": 43, "value": 1},
{"source": 15, "target": 44, "value": 1},
{"source": 15, "target": 45, "value": 1},
{"source": 15, "target": 46, "value": 1},
{"source": 15, "target": 47, "value": 1},
{"source": 15, "target": 48, "value": 1},
{"source": 15, "target": 49, "value": 1},
{"source": 15, "target": 50, "value": 1},
{"source": 15, "target": 51, "value": 1},
{"source": 16, "target": 52, "value": 1},
{"source": 17, "target": 53, "value": 1},
{"source": 18, "target": 54, "value": 1}
]
},
{
"name": "filtered-nodes",
"source": "link-data",
"transform": [{"type": "filter", "expr": "datum.source === hoverIndex"}]
}
],
"marks": [
{
"type": "text",
"encode": {
"enter": {
"fill": {"value": "black"},
"fontSize": {"value": 14},
"x": {"value": 10},
"y": {"value": 20},
"text": {"signal": "hoverIndex"}
},
"update": {"text": {"signal": "hoverIndex"}}
}
},
{
"from": {"data": "node-data"},
"type": "symbol",
"encode": {
"enter": {
"fill": {"scale": "color", "field": "group"},
"stroke": {"value": "white"}
},
"update": {
"cursor": {"value": "pointer"},
"size": {"signal": "2 * nodeRadius * nodeRadius"}
}
},
"name": "nodes",
"on": [
{
"modify": "node",
"trigger": "fix",
"values": "fix === true ? {fx: node.x, fy: node.y} : {fx: fix[0], fy: fix[1]}"
},
{"modify": "node", "trigger": "!fix", "values": "{fx: null, fy: null}"}
],
"transform": [
{
"signal": "force",
"type": "force",
"forces": [
{"force": "center", "x": {"signal": "cx"}, "y": {"signal": "cy"}},
{"force": "collide", "radius": {"signal": "nodeRadius"}},
{"force": "nbody", "strength": {"signal": "nodeCharge"}},
{
"force": "link",
"distance": {"signal": "linkDistance"},
"links": "link-data"
}
],
"iterations": 300,
"restart": {"signal": "restart"},
"static": {"signal": "static"}
}
],
"zindex": 1
},
{
"name": "linkpaths",
"from": {"data": "link-data"},
"type": "path",
"encode": {
"update": {"stroke": {"value": "#ccc"}, "strokeWidth": {"value": 0.5}}
},
"interactive": false,
"transform": [
{
"type": "linkpath",
"require": {"signal": "force"},
"shape": "line",
"sourceX": "datum.source.x",
"sourceY": "datum.source.y",
"targetX": "datum.target.x",
"targetY": "datum.target.y"
}
]
}
],
"scales": [
{
"domain": {"data": "node-data", "field": "group"},
"name": "color",
"type": "ordinal",
"range": {"scheme": "category20c"}
}
],
"signals": [
{
"name": "hoverIndex",
"value": -1,
"on": [
{"events": "symbol:mouseover", "update": "datum.index"},
{"events": "symbol:mouseout", "update": "-1"}
]
},
{
"name": "hoverNode",
"value": null,
"on": [
{"events": "symbol:mouseover", "update": "datum"},
{"events": "symbol:mouseout", "update": "null"}
]
},
{"name": "cx", "update": "width / 2"},
{"name": "cy", "update": "height / 2"},
{
"name": "nodeRadius",
"bind": {"input": "range", "max": 50, "min": 1, "step": 1},
"value": 8
},
{
"name": "nodeCharge",
"bind": {"input": "range", "max": 10, "min": -100, "step": 1},
"value": -30
},
{
"name": "linkDistance",
"bind": {"input": "range", "max": 100, "min": 5, "step": 1},
"value": 30
},
{"name": "static", "bind": {"input": "checkbox"}, "value": true},
{
"description": "State variable for active node fix status.",
"name": "fix",
"on": [
{
"events": "symbol:pointerout[!event.buttons], window:pointerup",
"update": "false"
},
{"events": "symbol:pointerover", "update": "fix || true"},
{
"events": "[symbol:pointerdown, window:pointerup] > window:pointermove!",
"force": true,
"update": "xy()"
}
],
"value": false
},
{
"description": "Graph node most recently interacted with.",
"name": "node",
"on": [
{
"events": "symbol:pointerover",
"update": "fix === true ? item() : node"
}
]
},
{
"description": "Flag to restart Force simulation upon data changes.",
"name": "restart",
"on": [{"events": {"signal": "fix"}, "update": "fix && fix.length"}],
"value": false
}
],
"$schema": "https://vega.github.io/schema/vega/v5.json",
"autosize": "none",
"description": "A node-link diagram with force-directed layout, depicting character co-occurrence in the novel Les Misérables.",
"height": 500,
"padding": 0,
"width": 700
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment