sábado, 28 de março de 2015

Quando eu estou programando, gosto de desenhar um grafo com a dependência entre as classes, assim fica fácil de ver quem está acoplado demais, ou quem tem responsabilidades em excesso. Mas quando o projeto começa a crescer, o grafo fica zoneado como esse aí da figura.


O jeito de conseguir ler isso é pegar as classes mais externas e extrair a árvore que começa nelas. Mas como fazer isso? Meu primeiro instinto foi abrir o python e começar a escrever um parser de .dot e um dfs, mas aí eu pensei que seria melhor fazer direto em bash mesmo:
for i in `cat graph.dot | gvpr -i "N[indegree==0]{print($)}"`; do dijkstra -d -a $i graph.dot | gvpr -i "N[dist<50.0]" | dot -Tpng -o $i.png; done; convert -append *png graph.png
Esse one liner bobo recorta todas as árvores do grafo e remonta numa imagem muito mais legível que a original:
E antes que perguntem: sim, Boolean depende de Context Emoticon smile

Nenhum comentário:

Postar um comentário