\chapter{Design}\label{ch:design} We now explain the design of Birdvisu in depth. First, we explain some important decisions and present the overall structure of the project, then we look into individual parts of the program. Birdvisu is implemented in Python, using PySide6, the official bindings for Qt6, for drawing on screen. We decided to use Qt, because it provides a lot of pre-made widgets and tools and since it is widely used, it is easy to find help for it on the Internet. The decision to use Python was not hard either. Not only Qt has official bindings for it, but we use the language very often and thus are comfortable writing in it. We do not expect the potential slowness of Python to be an issue, because for handling graphics we are using Qt, which is written in C++. Also, as we have analysed in section~\ref{s:areas}, we expect the topologies to be quite small. The project comprises of three main parts: data collection, annotation and presentation part. The data collection part is tasked with finding out the current topology and creating a usable representation of such topologies and their combinations. In the annotation part, we add additional information to the topologies like the difference from the expectation or graph properties of the topology. Finally, when we have all the needed information, we draw the topology on the screen, highlighting the relevant information. \section{Recurring and general patterns} \XXX{dictionaries everywhere, hashable recipes. ospffile with comments as a reusable format. Format of VertexID} \section{Data collection: providers and parsing} \XXX{sub-parts, why a topology is not a graph, stacking topologies with multiedges, fake-freezing, why is everything static. Graph representation, selection of BIRD's instance} \section{Annotations} \XXX{scoping, annotator creation, advantages of storing data in annotations and not vertices. Annotator protocol and posibility of export. Various uses of annotators: enhancing, analysis, visualisation} \section{Visualisation} \XXX{Layouting (nonexistent), why not graphviz, why not consensual metrics, how we are re-using annotations internally. Saving layouts}