Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

Aarón, Guillermo y Hugo - Proyecto de Desarrollo - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 21 de junio de 2024 por Mario S.

89 visualizaciones

Descargar la transcripción

Bueno, cuando queráis. 00:00:00
Buenas tardes a todos, nosotros somos el grupo de Fitness Tracker, 00:00:13
soy Hugo, Guillermo y Aarón, 00:00:16
y hemos desarrollado una aplicación que consta de dos bloques, 00:00:18
dos clientes, perdón, sí, que consta de dos bloques, 00:00:21
que serían dos clientes en concreto, uno de web y otro de Android, 00:00:25
y un backend que está desarrollado en parte por ASP.net 00:00:29
y en otra parte con Spring Boot. 00:00:32
¿Me paso por la diapositiva? 00:00:35
Bueno, este es un poco nuestro índice, lo que vamos a presentar hoy, 00:00:37
Vamos a explicar primero la arquitectura de lo que es nuestro servidor, luego vamos a explicar lo que son los dos clientes, que hay uno tercero que no sería exactamente un cliente porque se transporta datos más hacia el dispositivo móvil, que es el que contacta en concreto. 00:00:39
bueno, está en contacto con nuestro backend y al final pues unas conclusiones. 00:00:56
Para empezar, esto es en general lo que tenemos construido, tenemos primero un reloj inteligente que es lo que estaba explicando antes, 00:01:02
que es un smartwatch, un dispositivo que lo que hace es recoger datos propios del usuario como el nivel de oxígeno en sangre, 00:01:12
la frecuencia cardíaca, entre otras propiedades propias únicas del usuario y las vuelca al dispositivo Android. 00:01:18
este a su vez lo que hace es generar lo que nosotros llamamos las rutinas, 00:01:25
que son modelos que recogen datos del usuario, datos diarios, por ejemplo, 00:01:29
e información nutricional o, por ejemplo, comidas que consume el usuario a lo largo del día, 00:01:33
así como ejercicio que también hace, por ejemplo, pasos realizados. 00:01:37
Entonces, lo que hace el cliente Android es recoger estos datos, 00:01:41
construir el modelo que he dicho que es el de rutinas 00:01:44
y mediante una petición HTTP ponerse en contacto con nuestro backend 00:01:46
y poderlo registrar al usuario que sea el usuario, el cliente en concreto que tenga la aplicación en su móvil. 00:01:51
Este segundo bloque de aquí es lo que estaba explicando al principio, que es el cliente web, 00:02:04
que es otro cliente que nosotros tenemos en nuestro bloque Frontend, que también se pone en contacto directo con nuestro backend 00:02:08
y lo que es es un bloque que ofrece, entre otras cosas, un servicio avanzado de inteligencia artificial 00:02:14
que te permite generar dietas personalizadas a través de la Binding con la inteligencia artificial que nosotros estamos usando. 00:02:21
Nuestro backend se pone en contacto con nuestra base de datos, que es una base de datos Mongo, 00:02:29
a través de lo que son los repositorios, o sea que nuestros servicios no atacan directamente a la base de datos, 00:02:34
sino que lo hacen a través de repositorios. 00:02:39
¿Pasa, por favor? 00:02:42
Lo que usamos es un híbrido más por así decirlo en lo que es una arquitectura de microservicios más que nada porque cuando empezamos el proyecto lo que teníamos ideado era una base de datos, perdón, una base de datos, un backend en Mongo con Spring Boot, un backend sobre Mongo con Spring Boot y por otra parte un servicio sobre ASP.NET que atacaba directamente a un servicio externo que tenemos que es el de Spring Boot. 00:02:43
Lo que pasa es que tal y como evolucionamos el proyecto nos dimos cuenta de que luego a la hora de hacer los despliegues se nos facilita mucho el trabajo de controlar el tema de la seguridad porque nosotros lo que establecemos aquí es lo que se llama un API Gateway que es un módulo que tú expones entre tu cliente y el backend y lo que hace esto es redirigir las peticiones HTTP que recibe de clientes a los diferentes servicios que se estén ejecutando sobre tu backend. 00:03:13
De modo que nosotros lo que hacemos es tener este microservicio que no se puede atacar directamente desde fuera, 00:03:38
sino que todo este bloque está cerrado por el sistema de seguridad de AWS y tú lo único a lo que puedes atacar es este external services. 00:03:43
El sistema de seguridad que usamos, por así decirlo, los métodos de seguridad que usamos, 00:03:56
todos los endpoints que ofrecemos no están visibles al exterior. 00:04:02
Los únicos que están visibles son los de poderse iniciar sesión y el de poderse registrar, 00:04:05
que a esos debería tener acceso en principio cualquier usuario que esté usando nuestras aplicaciones de frontend. 00:04:11
Entonces, nosotros lo que usamos es la autentificación por JSON Web Token. 00:04:18
Esto es un sistema de autentificación que no guarda, es decir, no guarda una sesión como tal del usuario, 00:04:24
sino que lo que guarda es un token que se genera cada vez que un usuario se inicia sesión 00:04:30
y lo que hace este token es que lleva información que se llaman los claims 00:04:36
que es información que identifica al usuario 00:04:41
y esta información lo que hace es cuando tú haces una petición en el JSON Web Token 00:04:44
en las cabeceras del JSON Web Token 00:04:50
se guarda información de quién es este usuario en concreto 00:04:52
para no tener que consultar a la base de datos 00:04:56
y así poder hacer peticiones de forma más eficiente y garantizar que este usuario que está haciendo las peticiones 00:04:57
es un usuario que en realidad es válido para poder acceder a ciertos endpoints. 00:05:03
Entrando con la parte de la aplicación móvil, lo que se encarga de esta aplicación móvil es la parte de loguearse y registrarse. 00:05:09
Lo que se encarga es de registrar las rutinas que puede tener un usuario a lo largo de varios días. 00:05:16
También puede ver las dietas que genera también a partir de la web y también la parte de los requisitos que necesita cada día 00:05:21
en temas de kilocalorías, carbohidratos, proteínas y también todos los alimentos registrados que comen ese día 00:05:28
más los ejercicios que hacen. 00:05:34
Aparte, en la pantalla principal puede meter sus datos y puede cambiarlos. 00:05:37
El tema de cómo está montada la aplicación, para cada pantalla se crea una función 00:05:42
con la notación de composable para crear lo que viene siendo la interfaz y ya luego mostrándolo. 00:05:46
La parte de arriba, como es general, menos en el login, es donde se colocan los demás composables 00:05:53
y lo que he hecho es una top bar general donde voy colocando todo lo demás para no repetir código. 00:05:57
Para navegar entre las distintas pantallas lo que he hecho es un navhost que ha sido para navegar entre distintas rutas. 00:06:09
Lo que he hecho ha sido crear una clase allá donde guardas un string que es el nombre de la ruta 00:06:16
y cuando tú pones ese nombre de la ruta lo que vas a hacer es cambiar ese composable por el siguiente, 00:06:20
eliminando el contexto que tenías detrás y mostrando el siguiente. 00:06:26
Aparte, lo que he dicho antes, como tengo una torpa que no quiero que se muestre en todos lados, 00:06:30
lo que tengo es un listener que me detecta en qué ruta estoy. 00:06:35
Entonces, si estoy en el login, lo que hace es no mostrarme la torpa. 00:06:40
Para cada pantalla tiene su bimodel, donde básicamente tienen las variables que se van a mostrar en pantalla, 00:06:44
que se van a cambiar para mostrar esos datos que van a cambiar, por ejemplo, los datos de los alimentos, 00:06:53
Y también las funciones, que estas funciones se van a encargar de hacer llamadas a la API REST de Retrofit o a la base de datos de Local Room. 00:06:59
Para acceder al valor a través del composable, lo que tienes que hacer es llamar a ese ViewModel y utilizar esa función de ConnectAsState para pillar ese valor y ya después lo puedes tirar como quieras. 00:07:10
Una vez que se haga la recomposición, lo que va a hacer es recargar de otra vez la pantalla 00:07:25
y te va a mostrar los datos que tenías en el Blue Model ahora. 00:07:28
Para persistir esos datos de forma general, porque el Blue Model lo que hace es persistir esos datos de forma de cada pantalla, 00:07:34
una vez que tú destruyes ese composable, pues ya no existe ese Blue Model, ha perdido los datos, pues utiliza Room. 00:07:42
Room es una base de datos local que sirve para almacenar los datos, 00:07:48
de forma que si tú cierras la aplicación 00:07:51
pues estos datos perduran 00:07:55
y si cambio de pantalla 00:07:56
pues esos datos que tengo guardados en Room 00:07:58
pues los seguiría teniendo 00:08:00
aparte cuando hago una llamada de Retrofit 00:08:02
lo que hago es guardarlo en Room 00:08:06
¿por qué? 00:08:07
porque imagínate que me quedo sin internet 00:08:08
y no puedo hacer llamadas a Retrofit 00:08:10
pues lo que haces es tirar de la base de datos local 00:08:12
y coger los últimos datos que tú tenías en tu propio móvil 00:08:14
y luego mostrárselos para que no se queden parados 00:08:17
Para acceder a través de Room tenemos unos DAOs que tienen las queries para acceder a los datos que tú quieres y se hacen a través de unos repositorios. 00:08:20
Y como he hablado antes, para acceder a través del API REST, utilizo Retrofade para hacer 00:08:30
las llamadas, donde todas las llamadas menos el login tienen una autentificación que sería 00:08:44
el token, para verificar que ese usuario está registrado, que se hace a través del login, 00:08:54
Y funciona más o menos igual que el ROM, que sería a través de los repositorios. 00:08:59
EpiMode se conecta a través de los repositorios para luego hacer las llamadas y reconectar esos datos que devuelve el API. 00:09:04
Para el tema de elementos repetitivos, por ejemplo, el tema de cargando, cuando tú le das al botón de entrar, 00:09:12
si tú no bloqueas ese botón, tú le puedes pulsar varias veces y puedes hacer varias llamadas a esa API REST. 00:09:17
Entonces, eso es un fallo de seguridad. 00:09:23
Entonces, para evitar eso, por ejemplo, se congela la pantalla y sale una imagen de cargando. 00:09:24
para mostrar al usuario que no puede hacer más llamadas y que no puede hacer más datos. 00:09:29
Eso como se tiene que hacer en cada pantalla, para no repetir código, lo que se hace es una serie de eventos. 00:09:35
Para hacer estos eventos se encarga un ViewModel que tiene el patrón Singleton 00:09:42
y ese ViewModel se carga en los demás ViewModels. 00:09:47
Entonces tiene aquí una variable que sería el state que te indica el estado de la propia aplicación. 00:09:50
Si yo le pongo un estado de cargando, pues me mostraría que la pantalla está compulsable, que sería el fondo ese transparente con el logo. 00:09:57
En el caso de que sea un error, pues te muestra un diálogo con el error en cuestión, que yo lo haya puesto en ese momento. 00:10:06
Y para conectar todo de forma más rápida, he utilizado Agile y Docker, que es una inyección de dependencias, 00:10:14
que hace que yo pueda 00:10:20
llamar y conectar esos view models 00:10:23
de forma sin que tenga 00:10:25
que crearlos previamente 00:10:27
y lo pueda crear directamente los composables 00:10:28
por ejemplo, cuando yo creo una pantalla 00:10:31
yo con esta función de aquí 00:10:33
el HIT ya me detecta 00:10:34
que view model tengo que utilizar 00:10:37
para ya luego poder utilizarlo 00:10:39
en la aplicación 00:10:41
y así no tengo que estar cargando en cada view model 00:10:42
los datos y puedo 00:10:45
destruirlos y reutilizarlos 00:10:46
para el tema de la aplicación 00:10:49
y para el tema del reloj 00:10:52
la estructura es básicamente igual 00:10:55
funciona a través de composables 00:10:58
y view models 00:11:00
y este es un ejemplo de como quedaría 00:11:01
que es básicamente una lista 00:11:04
con todos los datos 00:11:05
que puede tener el usuario en el móvil 00:11:06
vale, pues ya continúo yo 00:11:10
en mi caso he estado 00:11:15
con el apartado web 00:11:16
Aquí podemos ver los dos tipos de vistas que hay, tanto la de ordenador como para móvil, que la web es completamente responsive. 00:11:17
Entonces podemos ver tanto la página de inicio que tiene una pequeña top bar donde redirecciona las diferentes secciones del inicio, 00:11:26
al igual que podemos ver en las diferentes páginas donde redirige al inicio y su sección correspondiente. 00:11:36
Podemos ver un apartado de register y un login, al igual que las rutinas y las dietas. 00:11:44
Las dietas llegan directamente desde la base de datos, al igual que las rutinas, ya que las guarda el teléfono. 00:11:55
Todo el sistema de navegación, tanto de la web como desde el móvil, está hecho con React Router. 00:12:04
entonces usamos un proveedor de autenticación 00:12:11
en el que tenemos tanto rutas públicas como las rutas privadas 00:12:16
para acceder a las rutas privadas necesitamos estar logueados en una cuenta 00:12:20
ya que usa el JVT y no tiene acceso a ello 00:12:25
en el caso de que no tengas acceso 00:12:30
te redirige automáticamente al login para loguearte 00:12:31
De esta manera podemos iniciar sesión 00:12:37
El proveedor realiza una petición al login con tus datos 00:12:43
Tanto el usuario como la contraseña 00:12:49
En nuestro caso el usuario es el Gmail 00:12:52
Damos el correo 00:12:55
Entonces según si está registrado o no el usuario 00:12:56
Nos devuelve ese token o no 00:13:00
El token automáticamente se establece en el encabezado 00:13:04
de las peticiones y se guarda 00:13:07
en la base de datos local del navegador 00:13:13
entonces a la vez que nosotros queremos ir navegando 00:13:16
por las diferentes pantallas comprobará ese token 00:13:20
y si no está correspondiente te dejará navegar a través de las 00:13:24
diferentes pantallas. También está establecido un sistema de logout 00:13:28
creo que son 15 minutos lo que está puesto en el que 00:13:32
el token deja de ser válido 00:13:36
y necesita recoger uno nuevo 00:13:38
para poder seguir funcionando 00:13:41
en la web 00:13:43
vale, esto es un pequeño ejemplo 00:13:44
de cómo está hecha la web 00:13:49
está hecha a través de MaterialWire 00:13:50
está hecha por componentes 00:13:52
entonces en la 00:13:55
por cada componente 00:13:56
establecemos las diferentes funciones que vamos a usar 00:13:59
y dos de donde podemos hacer peticiones 00:14:03
para cargar datos, etc 00:14:06
después devolvemos 00:14:08
lo que viene a ser la estructura del componente 00:14:10
que es lo que contiene, este componente 00:14:12
puede contener otros componentes creados 00:14:14
que sean necesarios 00:14:16
y desde donde se hace 00:14:17
el diseño completo de la web 00:14:20
ya está bien 00:14:24
al principio esto ya sería 00:14:26
bueno, pues nada más que comentar un poco 00:14:30
las conclusiones, están más o menos 00:14:32
listadas en pantalla. Lo que sí cabe destacar del proyecto de nuestra parte es que el proyecto 00:14:34
no está realmente cerrado. De hecho, una de las ambiciones era el implementar un chatbot 00:14:40
que sería como un asistente virtual que tú le puedes hacer consultas sobre, por ejemplo, 00:14:47
cómo construir una rutina de ejercicios diaria y él te respondería. Pero eso no se implementó 00:14:51
más que nada porque no está para esta entrega y es algo que se podría hacer de cara a un 00:14:59
futuro para poderlo ampliar. 00:15:04
También en la parte del 00:15:06
reloj, para el tema de coger 00:15:07
los datos, 00:15:09
vi dos formas, una que era que 00:15:11
a través de una API de Google Cloud 00:15:13
tú conseguías una PIKI 00:15:15
y luego la ponías para obtener esos datos, 00:15:17
pero era de pago, y luego era otra 00:15:19
librería de 00:15:21
Google, donde pillabas exactamente 00:15:22
los datos, pero 00:15:25
pillaba otra librería de por sí 00:15:26
y más de una vez alguna otra librería 00:15:29
de Google llamaba a algún tipo de problema, entonces 00:15:31
esa parte también haría falta 00:15:33
de mejora 00:15:35
aparte también de conectar 00:15:37
ya los datos de reloj a móvil 00:15:38
y eso sería todo 00:15:41
para poder acceder a la página web 00:15:45
hemos hecho este QR 00:15:47
que no tenemos 00:15:49
no hemos, por temas de tiempo 00:15:51
y tal, no hemos hecho una 00:15:53
URL, no hemos hecho un dominio propio 00:15:55
para nuestra URL 00:15:57
y bueno, pues esto lo que 00:15:58
te expone es una URL directo a lo 00:16:01
a los servicios de AWS 00:16:03
y ahí pues te expone un poco la IP también 00:16:05
pero sería la web en concreto 00:16:08
que está hostear en los servicios 00:16:10
de AWS 00:16:12
y poco más 00:16:13
bueno si eso hacemos una 00:16:15
una demostración para ver 00:16:20
en este caso aquí podemos 00:16:22
ver la web 00:16:24
que estaría desde 00:16:26
el apartado principal 00:16:28
con la barra de navegación 00:16:31
que está compuesta por secciones 00:16:32
donde podemos ir clicando a las diferentes 00:16:34
secciones y nos redirige 00:16:37
a ellas, podemos ver una pequeña descripción 00:16:39
de los diferentes servicios 00:16:41
al igual que un apartado 00:16:42
para descargar la aplicación 00:16:45
y nos llevaría 00:16:47
a un drive donde poder descargar 00:16:48
la aplicación 00:16:50
bien, además 00:16:52
también tiene un footer 00:16:55
luego ya tenemos 00:16:56
el apartado de registro 00:16:58
donde podríamos registrarnos 00:16:59
con un usuario, en este caso 00:17:03
sería un 00:17:04
un pequeño registrar donde aparece 00:17:10
donde podríamos registrarnos 00:17:12
pero en nuestro caso vamos a ir a 00:17:13
a un usuario 00:17:15
de ejemplo 00:17:18
puedes entrarte al usuario 1 00:17:19
bien, aquí podríamos verlos 00:17:21
el usuario 00:17:32
que tendría pues 00:17:34
la foto de perfil, el número de usuario 00:17:36
además de la rutina, dietas y físico 00:17:38
En el recogido, aquí podríamos ver en este apartado las diferentes rutinas llegadas desde el móvil de reloj y en el apartado de las dietas, las diferentes dietas creadas por la IA. 00:17:40
habría un apartado 00:17:58
de información de cuenta donde podríamos editar 00:18:01
los datos del usuario 00:18:03
a través de un formulario 00:18:05
al igual que cargar 00:18:07
una imagen 00:18:09
del perfil 00:18:10
miren el imágenes 00:18:12
a ver si hay alguna, creo que no 00:18:14
¿acargo alguna de estas? 00:18:17
sí, por ejemplo 00:18:19
donde cargaríamos la imagen y podríamos 00:18:20
rellenar los diferentes datos 00:18:23
por ejemplo aquí de peso 70, etc 00:18:24
editaríamos 00:18:27
si se está editando 00:18:29
lo que pasa es que no hay 00:18:33
y las consolas 00:18:34
de Eceros que usamos 00:18:37
que son muy 00:18:39
son todas de características 00:18:40
un poco limitadas 00:18:44
y entonces eso hace 00:18:45
eso ralentiza las respuestas 00:18:47
que obtenemos nosotros 00:18:49
luego también estaría 00:18:51
el formulario 00:18:54
para generar las dietas 00:18:56
donde le pasaríamos los diferentes parámetros 00:18:58
que esto ya contactaría con el 00:19:00
backend y nos generaría la dieta 00:19:02
y la pondría con la imagen correspondiente 00:19:04
en este apartado 00:19:06
que cogería una de las comidas que 00:19:09
contenga la dieta y pondría 00:19:12
la imagen 00:19:13
¿Enseñas tú el apartado móvil? 00:19:14
Aquí 00:19:17
Bueno, esta sería la aplicación móvil 00:19:17
este sería el loading 00:19:23
estos serían los dos campos que tienes que rellenar 00:19:24
Para el tema de usabilidad, lo que he hecho es que cuando le des aquí, te suelta el siguiente campo, tú puedes rellenarlo, y cuando termines con el segundo campo, directamente te saca el este, esto es lo que se ha comentado en los eventos, para bloquear el botón, que no puedes hacer varias llamadas, está haciendo la llamada a la que está cogiendo los datos, si quiere cargar. 00:19:26
la conexión aquí no es favorable 00:19:49
entonces 00:19:52
es lo que 00:19:52
no estamos diciendo web 00:19:54
estamos diciendo redes generales 00:19:58
porque no estamos usando web 00:20:00
nuestro gran amigo 00:20:01
EducaMadrid nos capa las conexiones con AWS 00:20:03
bueno pues aquí tendrán los datos 00:20:06
la parte del resultado serían los datos 00:20:13
sacados a partir de los datos del usuario 00:20:15
tú puedes entrar aquí 00:20:17
modificar la altura por ejemplo 00:20:18
Aquí tendrían los alimentos que ha consumido el usuario a lo largo del tiempo. 00:20:20
Aquí saldrían los requerimientos de lo que tiene que hacer cada usuario. 00:20:27
Aquí las dietas, que es lo que han hecho antes ellos. 00:20:31
Lo que se visualizaba en la web. 00:20:34
Más o menos. 00:20:36
Aquí en este apartado tendrías la parte de diaria, donde tú puedes meter la parte de los alimentos. 00:20:37
Yo, por ejemplo, si quiero meter un almuerzo, vengo aquí. 00:20:43
Tengo que poner el elemento en inglés porque la API pone los elementos en inglés. 00:20:45
Le doy a buscar y te aparecen todas las opciones. 00:20:51
Entonces tú clicas en ella y ya luego te aparecen aquí los datos necesarios. 00:20:54
En el almuerzo te pone los datos que necesites, etc. 00:21:01
Y ya luego para la web exactamente igual. 00:21:06
Estos datos se guardan tanto en la API REST de Retrofit, 00:21:08
Y ahora pues estaría la sección de preguntas por si hay alguna. 00:21:11
A ver, hay una parte que no habéis comentado, que es la conexión con la inteligencia artificial. ¿No está implementada? 00:21:36
Sí, o sea, lo que comentaba al principio del tema de lo que es un híbrido entre lo que es una arquitectura microservicios y lo que usamos, o sea, el principio de la arquitectura microservicios por lo que he visto es que cada servicio tiene su propia base de datos. 00:21:43
Nosotros podríamos hacer esto, pero en nuestro caso, por costes de desarrollo y maximizar el tiempo que tenemos en lo que podemos controlar nosotros, 00:21:57
hemos externalizado este servicio, que desarrollar una inteligencia artificial para nuestro propio servicio no es algo que nos tomaría meses y años tampoco. 00:22:09
entonces la cosa es que nosotros usamos 00:22:20
un modelo de lenguaje de OpenAI 00:22:22
que es el mismo que usa 00:22:24
uno de los que usa HGPT en concreto 00:22:26
nosotros usamos GPT-4 version 00:22:29
que si no me equivoco estaba en su 00:22:31
versión, se estaba lanzando 00:22:33
cuando estábamos haciendo las pruebas y creo que 00:22:35
la van a deteriorar para una más reciente 00:22:36
y es ese modelo de lenguaje 00:22:39
que usamos entonces, la cosa es que nosotros 00:22:41
construimos un Json con 00:22:43
los datos de la dieta que 00:22:44
queremos modelar 00:22:46
y eso se lo mandamos a la inteligencia artificial y le pedimos que responda con un JSON de vuelta. 00:22:49
Haciendo pruebas nosotros en un principio le mandamos lo que es un JSON esquema 00:22:55
que sería un JSON pero donde tú expones por cada campo en concreto por ejemplo 00:22:59
tiene que ser un string, puede tener ciertos datos y otros no 00:23:04
pero lo que pasa con este tipo de peticiones es que la I era muy inconsistente 00:23:09
y había que hacer varias peticiones para que te dé una respuesta que se ajuste al JSON 00:23:14
que nosotros podemos realizar para trabajar con los pojos en nuestros programas. 00:23:19
Entonces, lo que hicimos fue construir un objeto, un pojo con los datos ya de un ejemplo de dieta ya construido para pedirle 00:23:23
y luego serializarlo a Json y pedirle que siga el mismo ejemplo y entonces poder responder con los datos que le mandamos. 00:23:31
Por ejemplo, si yo le digo, oye, si por ejemplo, porque el flujo de datos es, tú haces una petición con una serie de datos, 00:23:38
tú le mandas información propia tuya, como por ejemplo la altura, el sexo, le mandas también el peso 00:23:45
y luego lo que haces también es que le puedes indicar, por ejemplo, el tipo de restricciones alimenticias, 00:23:51
también le puedes indicar algunas notas que tú consideres necesarias para luego poder construir la dieta. 00:23:58
A partir de esto nosotros lo que hacemos es, tenemos un listado de categorías de alimentos, 00:24:04
por ejemplo, para vegetarianos, para veganos, etc., 00:24:10
de los cuales le pedimos primero a la inteligencia artificial, 00:24:15
partiendo de unos datos que tú has mandado para modelar la dieta, 00:24:17
cuáles de estas categorías se ajustan para la dieta que se está intentando modelar, 00:24:21
la IA nos responde con un listado de categorías, 00:24:26
y entonces contactamos con la API, que es EDAMAM, 00:24:28
la que usamos para información nutricional, 00:24:32
que por cierto usamos un plan gratuito, porque tienen de pago, 00:24:33
y lo que hacemos es, ya partiendo de estas categorías, 00:24:37
nos envían varios alimentos que se ajustan a las categorías que nosotros hemos seleccionado 00:24:40
y a partir de esto le decimos a la IA, oye, esta persona quiere construir esta dieta 00:24:46
y estos son los alimentos que deberían, en principio, según las categorías que tú has seleccionado 00:24:50
con una primera petición, entrar en esta dieta. 00:24:55
Esa respuesta toma un tiempo, por las pruebas que hemos estado haciendo, 00:24:58
alrededor de 30 segundos más o menos por petición, por las pruebas que hemos hecho, 00:25:03
y esa respuesta se serializa a un Json, que es lo que se acaba devolviendo al cliente. 00:25:07
Y esa IA también cabe destacar que tiene costes, para lo que nosotros invertimos, 00:25:15
lo que cabe en nuestro presupuesto, pues invertimos 5 euros, 00:25:20
que el sistema que usan ellos es por tokens, que tokens vendrían a ser, 00:25:24
si mal no entiendo, las palabras con las que la IA puede responder. 00:25:28
Entonces, por cada cantidad de palabras que use la IA para construir tu respuesta, 00:25:33
pues se van consumiendo tokens y tú tienes un límite de tokens para poder consumir dentro del crédito que tú has recargado. 00:25:39
Pasa que estamos en España, que es una de las regiones que OpenAI ofrece un saldo gratuito 00:25:47
cuando tú creas una cuenta gratuita por primera vez para usar sus APIs, sus endpoints, 00:25:54
pero cuando fuimos a hacer este proyecto 00:25:58
pues ya, porque llevo usando 00:26:01
ChagPetel desde hace tiempo 00:26:03
y ya había pasado el tiempo 00:26:04
de uso de este crédito, entonces 00:26:07
había que pagar un poco 00:26:09
pero eso, una inversión para 00:26:11
¿Qué utilizáis para contactar? 00:26:13
Si usamos 00:26:17
¿Te refieres a? 00:26:18
Bueno, el módulo 00:26:20
Si, usamos el 00:26:21
el módulo 00:26:23
en concreto, en el proyecto se llama 00:26:27
FTI de Fitness Tracker 00:26:28
Artificial Intelligence y usamos 00:26:30
el framework de ASP.NET 00:26:32
con el lenguaje 00:26:35
de programación de C Sharp 00:26:37
esto lo usamos en su día 00:26:38
más que nada porque es muy muy sencillo 00:26:41
levantar una API REST con 00:26:43
C Sharp y ya 00:26:44
la verdad es que se agradece también el tema 00:26:46
de que de por sí 00:26:49
te monta ya la documentación 00:26:51
fue un poco un problema con Java 00:26:53
porque hay un problema con Java de que 00:26:54
Spring Boot al parecer 00:26:57
Spring Boot .3 no tiene bastantes 00:26:58
problemas de conflictos o compatibilidades 00:27:01
con el Spring Boot .3 00:27:04
tiene problemas de compatibilidad con lo que es, si no me equivoco 00:27:07
Spring Fox, que es el framework que ofrece 00:27:10
la documentación de Swagger para Java 00:27:13
entonces lo que acabamos haciendo al final es 00:27:15
degradar, esto ya me escapa un poquito de tu pregunta 00:27:19
pero lo que acabamos haciendo es degradar la versión de Spring Boot 00:27:22
a la 2.6 algo, que es la que es más fácil 00:27:25
de manipular para hacer la documentación 00:27:28
esto por una parte, también usamos 00:27:30
una librería que es open source 00:27:32
que se llama 00:27:34
openai.net, creo que se llama 00:27:35
que está en .net también 00:27:37
obviamente, y esto nos facilita 00:27:40
el tema, más que nada 00:27:43
porque para trabajar 00:27:44
con los endpoints de 00:27:46
OpenAI, ellos te dan un endpoint y tú 00:27:47
lo que haces es peticiones a ellos con un cierto 00:27:50
verbo, es post, no me acuerdo ahora mismo 00:27:52
en concreto cuál es el verbo, pero la cosa 00:27:54
es que tú haces peticiones a sus endpoints, entonces ellos te responden con Json 00:27:56
con mucha más información de la que tú podrías necesitar. 00:28:01
Esta librería en concreto te lo convierte en pocos con los que tú puedes trabajar fácilmente 00:28:04
en tu código para no tener que desrealizar el objeto, hacer clases que luego se tienen que mantener 00:28:08
o comentar y eso. ¿Alguna otra pregunta? 00:28:13
¿Creéis que si metéis un usuario y... 00:28:20
no, o sea, la cosa 00:28:39
en el caso de que tú intentes 00:28:40
por ejemplo navegar a la página 00:28:43
del perfil, si no está logueado 00:28:44
de ninguna manera 00:28:46
a la hora de verificar el token, etcétera 00:28:47
si no está ahí 00:28:50
no puede comprobarlo, redirige a la pantalla 00:28:52
del login para que te logues 00:28:54
la del login, no la de registrarse 00:28:57
efectivamente, al login 00:28:58
porque tú puedes tener una cuenta 00:29:00
principalmente porque también el autologout 00:29:02
está redirigido al mismo sitio 00:29:04
Preguntas, comentarios 00:29:07
viendo lo que aparece ahí 00:29:11
yo diría, a cambio de nada 00:29:13
podéis haber pillado una IP elástica 00:29:15
Sí, sí, es elástica esta, de hecho 00:29:18
es fija, es la misma 00:29:20
Sí, de hecho 00:29:21
en un principio 00:29:29
usamos un servicio 00:29:29
que se llama Bercel 00:29:33
lo que pasa es que funciona por rutas 00:29:34
HTTPS 00:29:37
entonces 00:29:37
se nos echó el tiempo encima para cambiar todo el sistema 00:29:39
HTTPS 00:29:43
De hecho la ruta estaba puesta como fitness tracker offalvercel.com y se nos echó porque a la hora de conectar con el AWS, si no era una petición de tipo HTTPS, no se negaba el servicio. 00:29:43
Entonces tuvimos que crear una máquina en EC2 para alojar todo el sistema de web. Ya no nos da tiempo al DNS. 00:29:58
Vale. Otra de las cosas, la cantidad de datos que esté moviendo el cliente, no sé si en algún momento, pues no lo he visto en el código, no sé si hacéis las peticiones a las bases de datos de forma reactiva, volvéis a los controladores utilizando programación reactiva para que luego… 00:30:05
En mi caso utilizo corrutinas para hacer las llamadas a Retrofit y a… 00:30:28
Y estáis atacando a la base de datos de manera reactiva y el controlador también. 00:30:32
No, se ataca directamente. 00:30:37
O sea, la versión que estáis utilizando de Mongo es una versión que nos está permitiendo atacar de manera reactiva al controlador. 00:30:40
El driver que utilizáis es el que os deja atacar a Mongo de manera reactiva y luego en los controladores estáis devolviendo flux, mono o que estáis haciendo... 00:30:48
No, estamos devolviendo en los controladores lo que devolvemos en Spring Boot, porque a lo mejor no me ha dado tiempo de explicar esto con más en detalle. 00:30:57
En la parte de SpringMobile lo que hacemos es, llega una petición en un cuerpo y lo que hacemos es redirigir la petición a los servicios, los servicios atacan a la base de datos pero lo que devolvemos al final al cliente es un response entity. 00:31:07
Las venéis y teniendo las corrutinas preparadas, cambiáis el respondente tipo de un flojo y un mono y os tira como un cañón. 00:31:21
Y luego, finalmente, es simplemente decirlo para que cuando tengáis un hueco libre, echéis un vistazo a Casandra. 00:31:38
Toda esta historia que tenéis montada me parece súper interesante, hay mucho dato por medio 00:31:48
y Casandra os va a permitir que vayáis enganchando datos desde cualquier sitio 00:31:54
que después podáis absorber, independientemente de cómo os ven al dato. 00:31:59
Os viene genial porque respecto a la parte de la dieta, 00:32:04
Mercadona tiene una API donde podéis enganchar directamente vuestra dieta 00:32:09
a los productos de Mercadona y tenéis la lista de la compra hecha. 00:32:13
Es decir, que ahí tenéis un conjunto de cosas que cuando tenéis una... 00:32:17
cuando tengáis un huequecito 00:32:21
simplemente una recomendación 00:32:25
es echar un vistazo 00:32:27
a lo que es Cash Pandera 00:32:29
que os puede abrir a algún mundo 00:32:30
además, buen trabajo, me ha gustado mucho 00:32:32
no sé si hay alguna otra pregunta 00:32:38
muchas gracias 00:32:41
a vosotros 00:32:44
muy bien 00:32:46
Queda uno 00:32:52
Si pasa a subir a buscarse 00:33:04
Hacemos una parada 00:33:10
Vale, pues lo preparan 00:33:12
Sí, vale 00:33:13
O si queréis ir a tomar un café 00:33:14
Son las seis 00:33:19
¿Y estos chicos los dejamos ahí plantados? 00:33:21
No, pues lo preparan y eso viene 00:33:23
No, ya casi me parece que todavía no hay tiempo 00:33:25
Si te hacéis un poco de tiempo ir al baño 00:33:28
¿Eh? 00:33:29
Sí, sí, sí. 00:33:30
Sí, vete, vete, aquí tienes que venir bajado, ¿eh? 00:33:31
Vale, vale. 00:33:34
No me veas, no, aquí bailando. 00:33:35
Idioma/s:
es
Autor/es:
Villablanca
Subido por:
Mario S.
Licencia:
Dominio público
Visualizaciones:
89
Fecha:
21 de junio de 2024 - 23:08
Visibilidad:
Público
Centro:
IES VILLABLANCA
Duración:
33′ 39″
Relación de aspecto:
1.78:1
Resolución:
1280x720 píxeles
Tamaño:
2.17

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid