Open David-Estevez opened 7 years ago
From https://github.com/asrob-uc3m/impresoras-asrob/issues/8
Suscribo totalmente los comentarios que haces. Yo hacía las propuestas con vistas a futuro, y obviamente sujetas a debate previo, pensando en que en la asociación hay gente no solo de electrónica y automática, sino también de informática y otras disciplinas para los que realizar algo como lo descrito puede requerir mucho menos esfuerzo.
En un futuro optimista, con un grupo de trabajo activo en impresoras y un sistema de gestión más optimizado, las impresoras tendrán mucho más uso del que tienen ahora y por tanto, limitar el uso a personas de la UC3M tendría valor de cara a poder usar un seguimiento de las reservas e identificar los usuarios más activos y los menos activos. Utilizando las cuentas de correo UC3M se evita que un usuario cree múltiples cuentas para reservar un número de horas mayor, y el sistema de correos de confirmación refuerza este filtro de forma activa (que tal vez se pudiera automatizar) limitando las horas de reserva y comprobando que el usuario que pretende reservar es un operador o no. Fuera de la ventaja de evitar duplicación de cuentas, no tiene mayor sentido limitar el acceso a la hoja de reservas, máxime cuando no hemos tenido problemas de este tipo todavía. Como ya he explicado, esta propuesta hace frente a problemas que aún no han surgido, pero que si conseguimos atraer más gente a usar las impresoras, puede que surjan. Por ello no veo necesario restringir el acceso a la hoja en este momento.
Por otro lado, sí existe una clara ventaja en sacar estadísticas de uso de impresoras, ya que podría valer para justificar los gastos relacionados con ellas, pedir subvenciones, obtener financiación desde el Departamento, optimizar su rendimiento (detectar problemas más frecuentes, escuchar sugerencias de usuarios), e incluso plantear mejoras funcionales o ampliación del número de impresoras disponibles.
En mi línea de coordinador de grupo de trabajo de Printer One, quiero aprovechar este nuevo tirón de gente para implementar cualquier mejora que pueda facilitar el acceso a las impresoras y reducir las tareas de mantenimiento para intentar garantizar buena salud para las mismas durante mucho tiempo.
Ahora que tenemos una página de operadores generada automáticamente, podríamos ir un paso más allá y utilizar la información de esta página para generar una base de datos de operadores autorizados.
Utilizando una autenticación basada en GitHub (similar a esta), se podría filtrar que únicamente los usuarios de GitHub que han obtenido el título de operador puedan realizar reservas.
Ayer y hoy he estado pegándome con XAMPP, HTML, PHP, SQL y demás, y además de servirme para refrescar cosas que había dejado olvidadas, he parido una página que podría hacernos las veces de sistema propio de reservas.
La página está en html con php incrustado. Utilizo el siguiente schema:
Y esta es una captura de la web. En la parte superior tiene algunos logs de depuración.
He estado hablando con @David-Estevez y creemos que esta estructura se podría explotar para conseguir algo funcional, aunque parece que estaríamos limitados por el tema del https (https://github.com/asrob-uc3m/actas/issues/88)...
Opiniones?
De cara a la experiencia del usuario final, no veo que haga diferencia http/https (aunque sea recomendable https siempre que hayan cuentas y contraseñas).
¿Cómo podría casar esto con la idea de autenticación basada en GitHub?
¿Cómo podría casar esto con la idea de autenticación basada en GitHub?
Según he visto, se podría dar de alta la aplicación en la cuenta de GitHub de ASROB, y usar la API de GitHub para recuperar la información del usuario (con el nombre de usuario sería suficiente) una vez logueado. Por tanto, de la captura anterior, el campo de nombre de usuario no sería necesario. Más info: https://developer.github.com/v3/guides/basics-of-authentication/
Por otra parte, @David-Estevez me habló de Flask, que según he entendido, se podría usar para algo similar: https://github-flask.readthedocs.io/en/latest/
Usar https es IMPRESCINDIBLE, ya que se necesita hacer autenticación de usuarios y, una vez autenticados, mandar credenciales al servidor. Tendríamos un agujero enorme de seguridad si lo hacemos por http.
Por otro lado, @Siotma y yo estuvimos hablando de montar el backend de la aplicación en Flask, que es un framework de Python que tiene muchas de las cosas necesarias para una web moderna y segura ya implementadas y testeadas. Como ejemplo, el módulo que comenta @Siotma (https://github-flask.readthedocs.io/en/latest/) permite autenticar usuarios usando GitHub de manera similar a como lo hace Gitbook, usando OAuth y sin tener que trampear nada con la cuenta de ASROB.
Por otro lado, la mayor dificultad de la web tal y como yo lo veía era la interfaz de usuario para llevar a cabo la reserva, y esto lo ha solucionado @Siotma perfectamente con su interfaz basada en tablas y checkboxes. Una vez se tiene eso, que es lo más chungo, diseñar el resto de la arquitectura me parece bastante sencillo.
Hoy, @David-Estevez y yo hemos hablado de la posibilidad de montar la aplicación de reservas (y eventualmente, la de impresoras y la de operadores) sobre un framework de Flask. De esta forma se podrían dinamizar las consultas, respetando prácticamente intacta sus estructuras y plantillas.
La estructura de la página sería similar a la expuesta en las capturas de más arriba, pero aprovechando bootstrap para darle un aspecto acorde con el de resto de páginas.
Además, como ya comenté, se dispone de una extensión para dar soporte a autenticación basada en GitHub: https://github-flask.readthedocs.io/en/latest/
@David-Estevez valora la posibilidad de incorporar javascript y/o AngularJS para dotar a la página de refresco en tiempo real.
Por otro lado, hemos revisado el concepto de webhooks y parece que encajarían bien con Flask en tanto en cuanto hacen POST a una url predesignada que Flask podría estar escuchando; de manera que al realizar este desarrollo obtendríamos al mismo tiempo una base con la que implementar fácilmente actualizaciones en tiempo real para nuestras páginas que actualmente son refrescadas periódicamente.
@David-Estevez se ha ofrecido a iniciar un nuevo repo para este desarrollo y dotarlo de una estructura compatible con Flask, así como los ficheros necesarios para comenzar a desarrollar la web. En caso de que no le sea posible realizarlo, lo comunicará por si se puede encargar otra persona.
Voy a intentar ampliar y/o clarificar las ideas que han surgido esta tarde también en esta issue.
Básicamente es lo que comenta @Siotma, diseñar un sistema basado en Flask, que nos permita a largo plazo unificar los esfuerzos de la web de impresoras la web de operadores y la futura web de reservas, así como sentar las bases de otras posibles futuras aplicaciones que se puedan necesitar (ejem, inventario, ejem).
Flask es idóneo para esto porque:
Respecto a cómo funcionaría el sistema, existen dos posibilidades.
La solución 1 tiene la ventaja de ser más sencilla de implementar. La 2, pese a ser algo más complicada, tiene la ventaja de ser más rápida e interactiva. Con la solución 2 también tenemos la posibilidad (si se demuestra su factibilidad) de alojar la web como parte de la web de asrob, usando javascript para hacer peticiones a nuestro backend.
Además, con un backend podríamos modificar nuestro sistema actual de refresco de las webs de impresoras y operadores para que en lugar de por polling, se generen por eventos. Estos eventos serían hooks de GitHub que se configurarían para actúar cada vez que se modifique o cree una issue.
Por último, un backend nos permitiría tener un ASROBot interactivo, aunque no sé si eso es algo bueno o malo :sweat_smile:
Como dice @Siotma , ya que yo tengo algo de experiencia montando proyectos de Flask, me he ofrecido a crear el esqueleto de un proyecto "Hola mundo" que sirva como base para que podamos construir esta web de reservas, sea cual sea el método elegido.
He creado el repo que alojará el proyecto en https://github.com/asrob-uc3m/printers-management-system. Como primera issue del mismo (https://github.com/asrob-uc3m/printers-management-system/issues/1) está el añadir el esqueleto del proyecto en Flask.
Context
From #8:
Objectives
References for future development