MvdGis
¿Qué es MvdGis?
Es un sistema desarrollado por los integrantes de montevideolibre que nos va a permitir visualizar gráficamente la ubicación y estado de los nodos disponibles.
Al igual que en muchos sistemas similares pensamos usar el api de google maps.
Lamentablemente como el sistema se encuentra abandonado, es que podemos usar el sistema de emergencia.
¡Sistema alternativo de emergencia!
Cómo el desarrollo del mvdgis estaba estancado el grupo de desarrollo decidió usar un método alternativo por el cual se genera un xml con la información sobre los nodos y se parsea mediante javascript en otra página.
Desarrollo
En una primera etapa harley y fcr hicimos el DER (Diagrama Entidad - Relación) y el ER (Esquema Relacional). Y aunque sea shockeante ver como el DER tiene 3 entidades y el ER tiene 4 tablas, la idea es hacer el sistema lo más simple posible y no extendernos con los requerimientos, lo cual enlentecería mucho su desarrollo.
DER
A continuación, el Diagrama Entidad Relación.
Aclaramos que las entidades de culor azul estarían representando entidades externas (en cierto sentido) al sistema, y por lo tanto no están representadas en el Esquema Relacional además de no existir como tales en la base de datos de mvdgis.
La versión original está hecha en dia, y junto a la versión en SVG, la cual es vectorizada y por lo tanto recomendable para imprimir, se encuentran aquí: der.zip
ER
He aquí el esquema relacional (hacer click en la flecha para abajo)
modes(id, name, wikipage);
PK: id
nodes(id, coordx, coordy, address, state, userwikiname, nodewikipage);
PK: id
CHECK: (state='i') OR (state='c') OR (state='o')
WFK: userwikiname references the user name in the wiki, ie: "fcr"
WFK: nodewikipage references the node page in the wiki.
interfaces(id, mode_id, description, working, node_id, essid, bssid);
PK: id
FK: node_id references nodes(id)
FK: mode_id references modes(id)
connections(interface1_id, interface2_id);
CHECK (
interface1_id NOT IN (
SELECT id
FROM interfaces
WHERE node_id = (
SELECT node_id
FROM interfaces
WHERE id=interface2_id
)
)
);
-- Aunque este check anterior sea un poco difícil de entender, la
-- idea detrás del mismo, es que una interfaz jamás se conecte con
-- si misma.
-- Es posible demostrar que la relación es simétrica.
-- Respecto a la implementación existen otras formas más simples
-- de lograr el mismo objetivo, aunque son más lentas dado que
-- implican hacer un join en una tabla que se supone crecerá
-- exponencialmente.
-- A continuación está otra forma algo más clara pero mucho más
-- ineficiente de hacer lo mismo:
-- CHECK( (SELECT COUNT(*) FROM interfaces int1, interfaces int2
-- WHERE int1.id = interface1_id
-- AND int2.id = interface2_id
-- AND int1.node_id = int2.node_id) = 0);
FK: interface1_id references interfaces(id)
FK: interface2_id references interfaces(id)
Donde PK significa Clave primaria, FK significa clave de integridad referencial, WFK significa clave de integridad referencial débil, y UK significa Restricción de unicidad.
Autenticicación
La razón principal por la cual no se ve ninguna entidad "Usuarios" en el DER, es porque nosotros nos basamos en los usuarios del wiki, y por tanto no hay una relación directa.
Clases
Como el sistema mvdgis todavía se encuentra en una etapa de desarrollo, tengo la obligación de avisar que la estabilidad de las APIs de las clases es muy poca, aunque con el tiempo se van a ir estandarizando.
mvdgis_Db: Esta clase establece una conexión a la base de datos del sistema al instanciarla, implementa por tanto la interfaz hacia la base. Como puede ocurrir que determinados datos tengan que ser extraidos del wiki y no de la base de datos, la interfaz de esta clase no es agnóstica al SQL.mvdgis_Nodes: Permite realizar con facilidad el ABM de los datos. Lamentablemente todavía no está pronto el código para la modificación de los datos.mvdgis_Wiki: Esta es una clase abstracta, teniendo por lo tanto la característica de que no tiene sentido de que sea instanciada. Provee un conjunto de funciones útiles para interactuar con el wiki. Además de todo está muy documentada.mvdgis_Tupla: Es una clase que aporta una capa de abstracción entre el lenguaje SQL y las clases que requieran ABM, con el objetivo de evitar la duplicación del código necesario para generar las consultas de SQL del tipo INSERT, DELETE y UPDATE.
Interfaces
Los siguientes son ejemplos de las interfaces. Obviamente la lógica interna aun no está programada.
- datos Una página de prueba con lista de todos los nodos. Existe como un ejemplo de uso del API de mvdgis.
- nodes Acá se muestran los nodos del usuario.
- add_node Si el usuario no tiene su nodo registrado, Puede agregar uno nuevo.
- mod_node El usuario puede modificar datos o borrar su nodo.
- del_node Página de confirmación de borrar un nodo.
- add_interface El usuario puede agregar una nueva interface a su nodo.
- mod_interface El usuario puede modificar o borrar una interface instalada en su nodo.
- add_connection El usuario puede agregar un enlace a una interface de otro nodo.
- mod_connection El usuario puede modificar o borrar un enlace con otro nodo.
- list_nodes El administrador puede ver todos los nodos registrados.
- list_modes El administrador puede ver todos los modos registrados.
- add_mode El administrador puede agregar un nuevo modo.
- mod_mode El administrador puede modificar o borrar un modo existente.