|
|
|
\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}
|
|
|
|
|
|
|
|
|