Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Aarón, Guillermo y Hugo - Proyecto de Desarrollo - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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
00:14:01
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
y
00:14:22
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
de
00:19:06
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:
- 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