~~ODT~~

ArgoGpl / Orfeo

Los ajustes de ArgoGpl basado en Orfeo, están basados en un framework denominado Caliope, desarrollado con la intención de permitir el desarrollo ágil de aplicaciones web, basadas en un sistema de Almancenamiento - Storage - diseñado tanto en forma de grafos como en modelos clásico de BD Relacionales, además soporta la generación dinámica de formularios web.

Módulo ArgoGpl / Orfeo Storage - tipo Grafos

El diseño se basa en una unidad mínima, llamada nodo, el nodo tiene propiedades y relaciones a otros nodos, a partir de estos elementos es posible establecer diseños que nos permitan relacionar la información.

Otra característica importante, es que los nodos en ningún momento son eliminados o modificados en su parte estructural, esto es, que la información en los nodos evoluciona conversando los nodos anteriores, lo que permite obtener acceso a un estado cualquiera en el tiempo del sistema a partir de los datos.

Un ejemplo de esto, se presenta a continuación

test1.py
import SIIM2GraphStorage
 
Proyecto_0 = SIIM2Node("proyecto")
Predio_0 = SIIM2Node("predio")
Predio_1 = SIIM2Node("predio")
Predio_2 = SIIM2Node("predio")
 
edges = SIIM2Edges()
edges.connect(from=Proyecto_0, to=Predio_0, relation='has_a')
edges.connect(from=Proyecto_0, to=Predio_1, relation='has_a')
edges.connect(from=Proyecto_0, to=Predio_2, relation='has_a')

<graphviz> digraph finite_state_machine {

rankdir=TB;
size="9,5"
node [color=black, style="rounded,filled" ,shape = box, fillcolor=slategray3 ];Proyecto_0;
node [fillcolor=slategray2];
      Proyecto_0 [label ="Proyecto_0::Proyecto"]
      Predio_0 [label ="Predio_0::Predio"]
      Predio_1 [label ="Predio_1::Predio"]
      Predio_2 [label ="Predio_2::Predio"]
Proyecto_0 -> Predio_0 [ label = "has_a" ];
Proyecto_0 -> Predio_1 [ label = "has_a" ];
Proyecto_0 -> Predio_2 [ label = "has_a" ];

} </graphviz>

Predio_4 = SIIM2Node("predio")
edges.connect(from=Proyecto_0, to=Predio_4, relation='has_a')
edges.disconnect(from=Proyecto_0, to=Predio_0, relation='has_a')
edges.disconnect(from=Proyecto_0, to=Predio_1, relation='has_a')
edges.connect(from=Predio_4, to=Predio_0, relation='was')
edges.connect(from=Predio_4, to=Predio_1, relation='was')

<graphviz> digraph finite_state_machine {

rankdir=TB;
size="9,5"
node [color=black, style="rounded,filled" ,shape = box, fillcolor=slategray3 ];Proyecto_0;
node [fillcolor=slategray2];
      
      Proyecto_0 [label ="Proyecto_0::Proyecto"]
      Predio_0 [label ="Predio_0::Predio"]
      Predio_1 [label ="Predio_1::Predio"]
      Predio_2 [label ="Predio_2::Predio"]
      Predio_4 [label ="Predio_4::Predio"]
      
Proyecto_0 -> Predio_4 [ label = "has_a" ];
Predio_4 -> Predio_0 [ label = "was" ];
Predio_4 -> Predio_1 [ label = "was" ];
Proyecto_0 -> Predio_2 [ label = "has_a" ];

} </graphviz>

Predio_5 = SIIM2Node("predio")
edges.connect(from=Proyecto_0, to=Predio_5, relation='has_a')
edges.disconnect(from=Proyecto_0, to=Predio_4, relation='has_a')
edges.disconnect(from=Proyecto_0, to=Predio_2, relation='has_a')
edges.connect(from=Predio_5, to=Predio_4, relation='was')
edges.connect(from=Predio_5, to=Predio_2, relation='was')

<graphviz> digraph finite_state_machine {

rankdir=TB;
size="9,5"
node [color=black, style="rounded,filled" ,shape = box, fillcolor=slategray3 ];Proyecto_0;
node [fillcolor=slategray2];

      
      Proyecto_0 [label ="Proyecto_0::Proyecto"]
      Predio_0 [label ="Predio_0::Predio"]
      Predio_1 [label ="Predio_1::Predio"]
      Predio_2 [label ="Predio_2::Predio"]
      Predio_4 [label ="Predio_4::Predio"]
      Predio_5 [label ="Predio_5::Predio"]
      Proyecto_0 -> Predio_5 [ label = "has_a" ];
Predio_5 -> Predio_4 [ label = "was" ];
Predio_5 -> Predio_2 [ label = "was" ];
Predio_4 -> Predio_0 [ label = "was" ];
Predio_4 -> Predio_1 [ label = "was" ];

} </graphviz>

Módulo SIIM2 VersionedNode

VersionedNode es la base de todos los nodos del sistema.

<graphviz> digraph finite_state_machine {

rankdir=TB;
size="9,5";
      forcelabels=true;        
node [color=black, style="rounded,filled" ,shape = box, fillcolor=slategray3 ];VN_head;
node [fillcolor=slategray2];

      
      VN_head [label ="HEAD_VERSION\nuuid::uuid4_head\ntimestamp::ts_last_update\ndata::uptodate" ]
      VN_v1 [label ="VERSION_1\nuuid::uuid4_v1\ntimestamp::ts_firstupdate\ndata::first_version" ]
      VN_v2 [label ="VERSION_2\nuuid::uuid4_v2\ntimestamp::ts_second_update\ndata::second_version"]
      VN_v3 [label ="PREVIOUS_VERSION\nuuid::uuid4_v3\ntimestamp::ts_previuos_update\ndata::previous_version"]
      
      VN_head -> VN_v3 [ label = "PARENT" ];

VN_v3 → VN_v2 [ label = “PARENT” ];

VN_v2 -> VN_v1 [ label = "PARENT" ];

} </graphviz>

Herramientas del front-end para SIIM2@

Por sus licencia principalmente, por su documentación y su sencillez, las herramientas seleccionadas para dar forma gráfica y realizar las interacciones con el usuario final son las siguiente.

  • Web2Py: Framework para Python con licencia LGPLv3, tiene como objetivo principal dar soporte al desarrollo ágil de software de aplicaciones web escalables, seguras y portables enfocadas en bases de datos.
  • Bootstrap es un conjunto de herramientas para la creación de sitios web, muy útil por la cantidad de formularios, tiografías y botones que pueden usarse.
  • AngularJs: framework de JavaScript el cual permite trabajar de una manera organiza y ágil.
  • Requirejs: RequireJS es una librería JavaScript que cumple la función de optimizar y facilitar la carga de librerías JavaScript en el navegador
  • Jquery: librería que facilita la interacción con un documento html, creación de animaciones y realizar comunicación con el servidor.
  • AngularUI: libreria de javascript, css, HTML5 muy liviana que permiten realizar estructuras Web compatibles entre dispositivos y navegadores.


Para el desarrollo del trabajo se recomienda las siguiente herramientas.

  • Baratanga y Firebug: plugins para la depuración de JavaScript y otros temas desde los navegadores Chrome y Firefox respectivamente.
  • Jslint: Herramienta para la validación de la sintaxis de javascript y las buenas practicas de codificación.
  • Vi: Editor de texto que viene por defecto en la mayoría de distribuciones Gnu/Linux y permite la edición de textos.
  • Inkscape: es un editor de Gráficos Vectoriales, similar al Adobe Illustrator, que busca ser compatible con SVG, de código abierto, sensible y extendible.
  • Gimp: Programa de manipulación de imágenes.
  • Git: Sistema control de versiones con el cual esta controlado el desarrollo del código.