GithubHelp home page GithubHelp logo

pablojjimenez / tfg Goto Github PK

View Code? Open in Web Editor NEW
4.0 1.0 0.0 5.69 MB

Repository for my Bachelor's Degree Final Project

License: GNU General Public License v3.0

Makefile 0.57% Python 97.23% Shell 1.13% Dockerfile 1.07%
tfg ugr api latex

tfg's People

Contributors

pablojjimenez avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

tfg's Issues

Explicar el estado del arte

Poder leer el estado del arte para que se perciba el análisis críticao del estado del arte y mi propuesta de mejora.
Debo explicar el panorama actual y que voy a hacer para mejorarlo en parte o totalmente.

Los tests están repetidos

Configúralo de forma que sólo comprueba los PRs o los push, pero no los dos, porque está repitiendo el test dos veces.

Interfaz REST

En aras de completar la HU #42
Implementar una una interfaz de comunicación REST para poder usar el trabajo usando verbos HTTP.

Explicar las fuentes de datos

En relación a la HU #14 quiero que se pueda leer especificado la procedencia de cada una de las fuentes y las variables existentes.
Fuentes primarias: INE, datos abiertos gob, ISCIII

Cobertura de test

Como estudiante quiero investigar como obtener la cobertura de tests que tiene el código para hablar con propiedad ante el tribunal.

La motivación debe ir antes que los objetivos

La motivación formula un problema, que siempre tiene que ser previo a la solución. La ingeniería software debe dedicarse a resolver problemas; si no hay problema, es difícil plantear objetivos y por tanto la solución a través de los mismos. También sin problema no hay posible usuario, no hay historias de usuario, y el resto del desarrollo no se puede edificar sobre eso.
Esta motivación hay que formularla, dentro de lo posible, antes de #1

Como programadora quiero poder utilizar este software agnósticamente

Como programadora
quiero utilizar este software de forma agnóstica
tal que si se quiere utilizar este proyecto como biblioteca con las restricciones que esto supone.

Especificación
Ahora mismo solo se puede utilizar este proyecto como una biblioteca de otro y es obligatorio que en el proyecto se use el mismo lenguaje de programación que en el que está escrito este trabajo.

Explicar porque se ejecutan CI por cada py versión

En aras de completar la HU #14

es necesario explicar claramente (que ahora mismo no está) porque se ejecutan las pipelines para todas las versiones de python e indicar qué bibliotecas han ido siendo las que han provocado que se reduzca el número de versiones funcionales de Python.

Resumen y palabras claves

En aras de satisfacer la HU #14

Los lectores quieren leer un pequeño resumen (en-es) del trabajo así como las palabras claves

Mejorar los tests de los repositorios

En el marco de la HU #42 y la tarea #48

  • Ahora mismo los datos se cargan en vectores de Python directamente, llevarlos a json y hacer la carga en dataframes para probar tambien esa carga.

  • Corregir algunos campos de los modelos que no se ajustan a la realidad de los datos.

Factoría para los repositorios

Como consecuencia de la issue #72 donde mi tutor me pide que explique el modelo de datos y clases que he cread. Me he dado cuenta que la creación de los repositorios se realiza en distintas partes del código y requiere de importar muchas clases de otros módulos. Esto es debido a que algunos modelos contienen muchos value-objects y la creación del repositorio para importarlos es tediosa.

Como solución plantearé en la PR implementar el patrón Factory method para simplificar y unificar el proceso de creación de instancias.

Crear el milestone 0

Con toda la infraestructura necesaria como comprobación ortográfica, los mismos milestones, HUs iniciales y demás.

Tengo que poder manipular y elegir los datos que me interesan

En relación a la HU #42
Para trabajar con todos esos datos es inviable si no se dispone de una funcionalidad que permita al usuario programador manipular la información que desea en cada momento. Para ello es necesario poder indicar que condiciones de datos quiero (año, causa, grupo de edad al que pertenece...) en que orden quiero obtener los datos y límite con paginación.

Generador de gráficos

En aras de contribuir a la tarea #63 y en consecuenta a la HU #62

El generador de gráficos tiene que ser capaz de generar las imágenes en un directorio temporal, es decir que se borran tras cumplir su cometido y no dejemos residuos en el servidor.

El path debe de ser configurable, relación con la issue #73

HAy que pensar en el caso que nos puede ocurrir de que varios usuarios estén haciendo uso de esta funcionalidad al mismo tiempo. Con la implementación actual, cada uno podría recibir una imágen distinta a la esperada. Una forma de solucionar esta casuística es generando un identificador aleatorio único que identifique a que usuario corresponde la imagen generada.

Adaptar el modelo de datos a los nuevos datos

Tarea fundamental para el cumplimiento de la HU #42

Mi tutor ha encontrado un conjunto de datos de mayor calidad al que tenía hasta el momento por lo que es necesario adaptar el modelo de datos a estos nuevos.

La mayor diferencia apreciada es que ahora todo se concentra en un único fichero CSV mientras antes había uno central como con claves foráneas a otros csv.

Estos mnuevos datos se pueden encontrar en este enlace.

Memoria descuadrada

En la primera página donde aparece el titulo, el nombre del tutor y el mío aparecen en la siguiente hoja descuadrados.

Reescribir capítulo 1 y 2

Darle una vuelta a los contenidos redactos centrándonos más en los usuarios diana que ya conocemos (gracias a la técnica de personas).

Sistema avanzado de consultas

En sintonía con la issue #95 y en aras de cumplir la issue #62

Los usuarios quieren un sistema donde con una sola llamada se puedan obterner datos de distintos recursos. Asimismo, tienen que tener la libertad de poder elegir sobre que campo proyectar la respuesta y no tener que devolver todos.

Implementar un sistema de caché

En aras de completar de la forma más eficiente posible la HU #62 y atendiendo a la tarea #63, planteo el siguiente problema:

Cuando se solicitan recursos GET se cargan en tiempo de demanda los objetos con los datos de disco, tras devolver la respuesta estos son eliminados por el Python garbage collector, pero ocurre que inmediatamente despúes se puede solicitar otra operación que requiere cargar de nuevo lo que minutos antes ya se había cargado.

Es interesante medir y estudiar si sería posible implementar un sistema de cachés que permita mantener los datos cargados, hay que ver si esto afectaría demasiado a la memoria...

Manejo de errores en el API

En aras de contribuir a la tarea #63 y en consecuenta a la HU #62

Es necesario notificar al usuario del API los posibles errores que pueden darse al igual que he hecho en otras capas de la aplicación mediante excepciones.

Los errores de los clientes están en el rango [400, 499] en esta API vamos a contemplar los siguientes casos:

  • 400 como código de error genérico ante una acción del usuario no esperada.
  • 404 cuando no se encuentra el recurso que solicita
  • 422 cuando la entidad no es entendible. E.g: la query formada por el usuario para traerse los datos es incorrecta (en contenido o forma)

Para errores del servidor se usa el rango [500, 599]

Diseñar los estados inválidos del dominio

De la HU #42
Ante los posibles estados inválidos que puedan surgir es necesario otorgar defensivamente de semántica a estos errores mediante el tratamiento y diseño de excepciones que determinen los motivos de los posibles problemas que puedan surgir.

Hay que justificar la elección de un gestor de tareas

Makefile no es el más adecuado, ni está instalado por omisión cuando tienes Python.

TFG/Makefile

Line 1 in 4b67f3d

clean:

Hay que justificar la elección de cualquier gestor, y cambiar la decisión a invoke u otro más pythónico. También hay que añadir todas las tareas que haya, como lanzar el backend.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.