La entrega#

Cada alumno deberá implementar uno de los servicios descritos en el enunciado (servicio principal, autenticación, catálogo o servicio de ficheros) o el cliente para la plataforma IceFlix descrita. El servicio o cliente a implementar por cada alumno será asignado por los profesores a través de sorteo, que se publicará en Campus Virtual.

Se entregará únicamente el enlace al repositorio en GitHub o cualquier otro repositorio accesible a través de Internet en la tarea habilitada para tal efecto en la plataforma de Campus Virtual. Dicho repositorio debe ser privado, con el fin de evitar plagios, y únicamente se invitará a poder ver el repositorio a los profesores de la asignatura.

Se considerará como entregable el commit etiquetado como ordinaria-p1.

Trabajo en equipo

Aunque la práctica es individual, se recomienda encarecidamente la colaboración entre alumnos, de modo que cada uno con vuestro servicio o cliente podáis ayudar y ser ayudados por otro compañero que esté implementando otro servicio o el cliente.

De ese modo podréis probar si vuestro servicio se comporta como el cliente o los servicios de vuestros compañeros esperan y estudiar si el comportamiento de la interfaz es el esperado.

Uso de la VPN#

La Universidad de Castilla la Mancha pone a disposición del personal y los alumnos una red privada virtual (VPN). Una vez configurada, permite la conectividad entre dispositivos dentro de la misma, sin importar que éstos estén en diferentes redes físicas.

La VPN puede ser incluso configurada dentro de una máquina virtual, permitiendo que un programa que sea ejecutado en ella sea accesible a pesar de las limitaciones que suelen tener este tipo de instalaciones en cuanto al uso de la red.

Esta funcionalidad puede ser utilizada para realizar trabajo colaborativo y poder realizar pruebas entre diferentes servicios, siempre y cuando se utilice el endpoint correcto.

En el siguiente ejemplo podéis veir una ejecución del ejemplo de “Hola mundo” que tan trillado tenemos: al lanzar el servidor se muestra el proxy del sirviente y, separados por :, todos los endpoints del adaptador de objetos.

$ ./Server.py --Ice.Config=Server.config
printer1 -t -e 1.1:tcp -h 192.168.1.57 -p 7070 -t 60000:tcp -h 192.168.1.106 -p 7070 -t 60000:tcp -h 192.168.122.1 -p 7070 -t 60000:tcp -h 192.168.130.1 -p 7070 -t 60000:tcp -h 172.24.178.57 -p 7070 -t 60000

En éste caso, el equipo estaba conectado a 5 redes diferentes. Sólo uno de los endpoints pertenece a la VPN, por lo que averiguar cúal es para utilizarlo es crucial, ya que si usamos cualquier otro, el endpoint no será accesible si estamos en otra red.

En el ejemplo, el endpoint correspondiente a la red de la VPN es tcp -h 172.24.178.57 -p 7070 -t 60000. Para podernos conectar al proxy remoto, deberemos ejecutar el cliente de la siguiente manera:

$ ./Client.py "printer1 -t -e 1.1:tcp -h 172.24.178.57 -p 7070 -t 60000"

¿Cuál es el endpoint relacionado con la VPN?#

La forma más eficaz es conocer la IP de nuestra interfaz en la VPN: al conectarnos a una VPN el sistema operativo crea una interfaz de red virtual (no asociada a un dispositivo físico) que permite “tunelar” el tráfico a través de ella. Por defecto, en sistemas GNU/Linux suele llamarse tun0, por lo que para averiguar su IP usaremos:

$ ip address show dev tun0
7: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1422 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none
    inet 172.24.178.57/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::2163:8856:aabd:5c22/64 scope link stable-privacy
       valid_lft forever preferred_lft forever

Una vez conocida la IP de nuestra interfaz, fácilmente averiguaremos qué endpoint está asociado a la misma.

Estructura del repositorio#

Para evitar en la medida de lo posible problemas a la hora de crear la estructura del repositorio, se proporcionará un repositorio plantilla que podrá ser utilizado por los alumnos.

El repositorio de entrega deberá cumplir al menos con la siguiente estructura:

  • run_service: debe estar en la raíz del directorio del proyecto y debe ejecutar la instancia del microservicio implementado. El fichero debe ser ejecutable. En caso de implementar el cliente, este fichero no debe existir en el repositorio..

  • run_client: debe estar en la raíz del directorio del proyecto y debe lanzar el programa cliente. El fichero debe ser ejecutable. En caso de implementar un servicio, este fichero no debe existir en el repositorio.

  • README.md: debe estar en la raíz del directorio del proyecto. Será un pequeño documento en lenguaje Markdown o texto plano que explicará paso a paso cómo se debe realizar la configuración del servicio o cliente y cómo lanzarlo usando uno de los scripts listados anteriormente.

    También debe incluir, bajo el título, la URL al repositorio del proyecto, así como cualquier otra información relevante del proyecto que el alumno considere oportuna.

Para los alumnos que tengan que implementar el servicio de ficheros, se puede incluir un archivo de no más de 5MB a modo de ejemplo. De ser así, dicho archivo deberá estar en el directorio resources.

Es muy importante seguir las indicaciones sobre la entrega de manera exacta ya que parte del proceso de evaluación se realiza de forma automática, por eso los nombres de fichero deben ser exactamente los indicados anteriormente.

Para facilitar la creación de esta estructura, se proporciona un repositorio plantilla que incluye todos los ficheros anteriores, además de algunos ficheros de configuración, ejemplos de implementación y utilidades para crear un programa instalable Python.

Adicionalmente a la evaluación automática se realizará un análisis estático de código con pylint. Se considera que el estilo es correcto si obtiene como mínimo un 9.0 de puntuación global.

Note

ATENCIÓN: Si usas Windows, ten en cuenta que los retornos de línea deben ser TIPO UNIX. Si se utilizan los retornos tipo DOS la práctica no funcionará en el entorno de pruebas.

Documentación de entrega#

No se solicitará memoria de prácticas ni documentación adicional en la entrega. La evolución del proyecto se consultará con el historial de commits de GIT. Por tanto, no se recomienda subir la práctica en uno o dos commits.

Defensa de prácticas#

La defensa de la práctica es obligatoria. Si algún alumno no se presentara la práctica se considerará no presentada.

Cada alumno presente la práctica será convocado por uno de los profesores de prácticas a una hora específica para revisar la práctica con ellos y ejecutarla.

Se hará especial hincapié en ello en los siguientes casos:

  • Repositorio con muy pocos commits.

  • El buscador de plagios alerte sobre dos o más entregas.

Una vez publicadas las notas, los alumnos tendrán derecho a revisión si no estuvieran de acuerdo.