<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Israel Brea Piñero</title>
        <link>https://israelbreap-portfolio.pages.dev/es/</link>
        <description>Recent content on Israel Brea Piñero</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>es</language>
        <lastBuildDate>Thu, 10 Jul 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://israelbreap-portfolio.pages.dev/es/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Pixora - Aplicación nativa Android</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/pixora-android/</link>
        <pubDate>Thu, 10 Jul 2025 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/pixora-android/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/pixora-android/pixora-android.png" alt="Featured image of post Pixora - Aplicación nativa Android" /&gt;&lt;p&gt;Pixora es una aplicación nativa para Android desarrollada como proyecto para la asignatura de Desarrollo de Aplicaciones Android del Máster Universitario en Informática Móvil de la Universidad Pontificia de Salamanca. La aplicación está inspirada en plataformas como Pinterest y permite a los usuarios explorar, organizar y compartir contenido visual de una manera sencilla e intuitiva.&lt;/p&gt;
&lt;h2 id=&#34;características&#34;&gt;Características
&lt;/h2&gt;&lt;p&gt;Las funcionalidades principales de Pixora incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Navegar y visualizar imágenes filtradas por categorías.&lt;/li&gt;
&lt;li&gt;Buscar imágenes con una función de scroll infinito.&lt;/li&gt;
&lt;li&gt;Crear listas (colecciones) personalizadas para organizar fotos.&lt;/li&gt;
&lt;li&gt;Dar &amp;ldquo;Me gusta&amp;rdquo; a las imágenes para guardarlas en una sección de favoritos.&lt;/li&gt;
&lt;li&gt;Subir fotos propias desde la cámara o la galería del dispositivo.&lt;/li&gt;
&lt;li&gt;Ver un feed de actividad con las interacciones recientes, como &amp;ldquo;me gusta&amp;rdquo; y fotos añadidas a listas.&lt;/li&gt;
&lt;li&gt;Acceder a un perfil personal para ver las fotos subidas, las listas creadas y las imágenes favoritas.&lt;/li&gt;
&lt;li&gt;Cambiar el idioma.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;detalles-técnicos&#34;&gt;Detalles Técnicos
&lt;/h2&gt;&lt;p&gt;La aplicación fue desarrollada utilizando tecnologías modernas de Android y buenas prácticas de arquitectura de software:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lenguaje y Framework&lt;/strong&gt;: Construida íntegramente con Kotlin y Jetpack Compose, el moderno toolkit de UI declarativa de Google, para un proceso de desarrollo más conciso, intuitivo y eficiente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arquitectura&lt;/strong&gt;: Se implementó una combinación de MVVM (Model-View-ViewModel) y Clean Architecture para asegurar una base de código robusta, escalable y fácil de mantener. El proyecto está claramente estructurado en capas de Dominio, Datos y Presentación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestión de Datos&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Room&lt;/strong&gt;: Utilizado para la persistencia local de datos estructurados como fotos, listas creadas por el usuario y registros de actividad. Se eligió por su verificación de consultas en tiempo de compilación y su integración nativa con Flow.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preferences DataStore&lt;/strong&gt;: Empleado para almacenar datos simples clave-valor, como las preferencias de idioma y modo de visualización (claro/oscuro), ofreciendo una alternativa segura y asíncrona a SharedPreferences.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integración de API&lt;/strong&gt;: Se integró la API de Unsplash para proporcionar un amplio catálogo de imágenes de alta calidad. Las peticiones de red se gestionan de forma eficiente con Retrofit para la definición declarativa de la API y OkHttp para el manejo de las conexiones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Librerías Externas&lt;/strong&gt;: Se utilizaron librerías clave de terceros para mejorar la funcionalidad:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hilt&lt;/strong&gt;: Para la inyección de dependencias, garantizando una arquitectura desacoplada. Fue elegido sobre Koin por su seguridad en tiempo de compilación y por ser la solución recomendada oficialmente por Google&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coil (Coroutine Image Loader)&lt;/strong&gt;: Para la carga asíncrona y el almacenamiento en caché de imágenes de forma rápida y eficiente, con soporte nativo para Jetpack Compose.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lottie&lt;/strong&gt;: Para renderizar animaciones vectoriales complejas, utilizada específicamente en la pantalla de carga inicial (splash screen).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kotlinx Serialization&lt;/strong&gt;: Utilizada para habilitar una navegación type-safe con Jetpack Compose Navigation, permitiendo pasar objetos completos como argumentos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Android Jetpack&lt;/strong&gt;: La aplicación utiliza extensivamente componentes de Android Jetpack, incluyendo Navigation para gestionar el flujo de la app, Coroutines y Flow para operaciones asíncronas, y ViewModel para la gestión de datos de la UI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Animaciones&lt;/strong&gt;: Se incluyeron varias animaciones para mejorar la experiencia de usuario, como una animación de Lottie en la pantalla de carga, transiciones suaves de visibilidad para la barra de navegación y animaciones interactivas para el gesto de &amp;ldquo;me gusta&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;publicación&#34;&gt;Publicación
&lt;/h2&gt;&lt;p&gt;La aplicación fue publicada en la Google Play Store como una versión de prueba cerrada.
Enlace a la Google Play Store: &lt;a class=&#34;link&#34; href=&#34;https://play.google.com/store/apps/details?id=com.ibrepidevs.pixora&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Pixora&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;repositorio-del-proyecto&#34;&gt;Repositorio del Proyecto
&lt;/h2&gt;&lt;p&gt;El código fuente de este proyecto está disponible en GitHub: &lt;a class=&#34;link&#34; href=&#34;https://github.com/israelbrea12/Pixora-Android.git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/israelbrea12/Pixora-Android.git&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;visualizar-proyecto-en-pdf&#34;&gt;Visualizar proyecto en pdf
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;../pixora-android.pdf&#34; &gt;Pixora-Android&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;vídeo-pixora&#34;&gt;Vídeo Pixora
&lt;/h2&gt;&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/DYYbeGz09Fc&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

</description>
        </item>
        <item>
        <title>Pixora - Aplicación nativa iOS</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/pixora-ios/</link>
        <pubDate>Sat, 10 May 2025 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/pixora-ios/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/pixora-ios/pixora.png" alt="Featured image of post Pixora - Aplicación nativa iOS" /&gt;&lt;p&gt;Pixora es una aplicación nativa para iOS desarrollada como proyecto de fin de Grado para la asignatura de Desarrollo de Aplicaciones iOS del Máster Universitario en Informática Móvil de la Universidad Pontificia de Salamanca. La aplicación está inspirada en plataformas como Pinterest y permite a los usuarios explorar, organizar y compartir contenido visual.&lt;/p&gt;
&lt;h2 id=&#34;características&#34;&gt;Características
&lt;/h2&gt;&lt;p&gt;Las funcionalidades principales de Pixora incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Navegar y visualizar imágenes.&lt;/li&gt;
&lt;li&gt;Buscar imágenes.&lt;/li&gt;
&lt;li&gt;Crear listas (colecciones) personalizadas para organizar imágenes.&lt;/li&gt;
&lt;li&gt;Dar &amp;ldquo;Me gusta&amp;rdquo; a las imágenes.&lt;/li&gt;
&lt;li&gt;Subir tus propias fotos desde la cámara o galería.&lt;/li&gt;
&lt;li&gt;Ver tu feed de actividad, incluyendo fotos a las que has dado &amp;ldquo;Me gusta&amp;rdquo; y fotos añadidas a listas.&lt;/li&gt;
&lt;li&gt;Ver tus fotos subidas.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;detalles-técnicos&#34;&gt;Detalles Técnicos
&lt;/h2&gt;&lt;p&gt;La aplicación fue desarrollada utilizando tecnologías modernas de Apple y patrones arquitectónicos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lenguaje y Framework&lt;/strong&gt;: Se utilizaron Swift y SwiftUI por su seguridad, rendimiento y capacidades de UI declarativa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arquitectura&lt;/strong&gt;: Se implementó una combinación de MVVM (Model-View-ViewModel) y Clean Architecture para asegurar una base de código robusta, modular y mantenible. El proyecto está estructurado en capas de Dominio, Datos y Presentación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestión de Datos&lt;/strong&gt;: Se utilizó Core Data para la persistencia local de datos, gestionando objetos y manejando la persistencia, recuperación, validación y gestión de cambios en esos datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integración de API&lt;/strong&gt;: Se integró la API de Unsplash para proporcionar un amplio catálogo de imágenes de alta calidad para el contenido de la aplicación. Las peticiones de red se manejaron utilizando URLSession.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Librerías Externas&lt;/strong&gt;: Se incorporaron varias librerías externas a través de Swift Package Manager para mejorar la funcionalidad y la experiencia de usuario:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CryptoSwift&lt;/strong&gt;: Utilizada para generar hashes MD5 para la autenticación de la API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lottie&lt;/strong&gt;: Integrada para mostrar animaciones atractivas en la Launch Screen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SDWebImageSwiftUI&lt;/strong&gt;: Utilizada para la carga asíncrona y caché eficiente de imágenes desde URLs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Swinject&lt;/strong&gt;: Empleada como framework de Inyección de Dependencias para gestionar las dependencias.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frameworks de Apple&lt;/strong&gt;: Se utilizaron frameworks nativos clave de Apple:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UserNotifications&lt;/strong&gt;: Implementado para gestionar notificaciones locales para re-enganchar a los usuarios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AVFoundation&lt;/strong&gt;: Utilizado para acceder a la cámara del dispositivo y capturar fotos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UIKit&lt;/strong&gt;: Utilizado para funcionalidades aún no completamente maduras en SwiftUI, como información del dispositivo e integración de una vista previa de la cámara (UIViewRepresentable).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Foundation&lt;/strong&gt;: Proporcionó tipos de datos fundamentales, colecciones y acceso a servicios del sistema.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layout y Adaptabilidad&lt;/strong&gt;: El layout fue diseñado para ser compatible con varios tamaños de pantalla de iPhone y iPad, así como con las orientaciones vertical y horizontal, utilizando GeometryReader, UIDevice, LazyVGrid con ítems adaptativos y clases de tamaño.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Animaciones&lt;/strong&gt;: Se incluyeron varias animaciones para mejorar la experiencia de usuario, incluyendo una animación de Lottie en la pantalla de inicio, animaciones de visibilidad de la barra de pestañas y animaciones en los botones de &amp;ldquo;Me gusta&amp;rdquo; y &amp;ldquo;Guardar&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;publicación&#34;&gt;Publicación
&lt;/h2&gt;&lt;p&gt;La aplicación fue publicada en la App Store de Apple el 6 de mayo de 2025.
Enlace a la App Store: &lt;a class=&#34;link&#34; href=&#34;https://apps.apple.com/es/app/pixora/id6745432045?l=en-GB&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Pixora&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;repositorio-del-proyecto&#34;&gt;Repositorio del Proyecto
&lt;/h2&gt;&lt;p&gt;El código fuente de este proyecto está disponible en GitHub: &lt;a class=&#34;link&#34; href=&#34;https://github.com/israelbrea12/Pixora-iOS.git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/israelbrea12/Pixora-iOS.git&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;visualizar-proyecto-en-pdf&#34;&gt;Visualizar proyecto en pdf
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;../pixora-ios.pdf&#34; &gt;Pixora-Android&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;vídeo-pixora&#34;&gt;Vídeo Pixora
&lt;/h2&gt;&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/4bGkxt8a2kE&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

</description>
        </item>
        <item>
        <title>Creación de una API con Express y despliegue en la nube con AWS</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/api-express-aws/</link>
        <pubDate>Mon, 10 Mar 2025 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/api-express-aws/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/api-express-aws/apicloud.png" alt="Featured image of post Creación de una API con Express y despliegue en la nube con AWS" /&gt;&lt;p&gt;Este proyecto fue desarrollado como parte de la asignatura de Tecnologías del lado del servidor: Cloud Computing dentro del Máster Universitario en Informática Móvil (MIMO). El objetivo fue implementar una API REST completa utilizando &lt;strong&gt;Node.js y Express&lt;/strong&gt;, con autenticación mediante &lt;strong&gt;JWT&lt;/strong&gt;, persistencia en &lt;strong&gt;SQLite&lt;/strong&gt; y despliegue en &lt;strong&gt;AWS&lt;/strong&gt; siguiendo buenas prácticas de escalabilidad y automatización.&lt;/p&gt;
&lt;h2 id=&#34;objetivos-del-proyecto&#34;&gt;Objetivos del proyecto
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Implementar una API REST conforme a una especificación &lt;strong&gt;OpenAPI&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Gestionar autenticación y autorización con &lt;strong&gt;JWT&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Implementar operaciones &lt;strong&gt;CRUD&lt;/strong&gt; para los recursos de películas y valoraciones.&lt;/li&gt;
&lt;li&gt;Aplicar validaciones de datos y manejo adecuado de códigos de estado HTTP.&lt;/li&gt;
&lt;li&gt;Desplegar la API en &lt;strong&gt;AWS&lt;/strong&gt; con una infraestructura escalable y automatizada usando &lt;strong&gt;Packer&lt;/strong&gt; y &lt;strong&gt;Terraform&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;funcionalidades-principales&#34;&gt;Funcionalidades principales
&lt;/h2&gt;&lt;h3 id=&#34;1-autenticación-y-seguridad&#34;&gt;1. Autenticación y seguridad
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Endpoint de login&lt;/strong&gt; (&lt;code&gt;POST /sessions&lt;/code&gt;) para generar tokens JWT.&lt;/li&gt;
&lt;li&gt;Protección de rutas sensibles mediante &lt;strong&gt;middleware de autenticación&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Manejo de errores de autenticación con respuestas adecuadas (&lt;code&gt;401 Unauthorized&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-gestión-de-películas-movies&#34;&gt;2. Gestión de películas (&lt;code&gt;/movies&lt;/code&gt;)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GET /movies&lt;/strong&gt;: Devuelve todas las películas con los campos requeridos (ID, título, género, duración, rating).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paginación opcional&lt;/strong&gt; para mejorar la eficiencia en consultas grandes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manejo de errores&lt;/strong&gt; con respuestas adecuadas (&lt;code&gt;404 Not Found&lt;/code&gt;, &lt;code&gt;500 Internal Server Error&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-gestión-de-valoraciones-ratings&#34;&gt;3. Gestión de valoraciones (&lt;code&gt;/ratings&lt;/code&gt;)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CRUD completo&lt;/strong&gt; para que los usuarios puedan crear, leer, actualizar y eliminar valoraciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validaciones&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rating&lt;/code&gt; debe estar entre &lt;strong&gt;0 y 5&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;comentarios&lt;/code&gt; con máximo &lt;strong&gt;500 caracteres&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restricciones de acceso&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Solo usuarios autenticados pueden modificar o eliminar sus valoraciones.&lt;/li&gt;
&lt;li&gt;Manejo de errores con códigos adecuados (&lt;code&gt;401 Unauthorized&lt;/code&gt;, &lt;code&gt;422 Unprocessable Entity&lt;/code&gt;, &lt;code&gt;201 Created&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4-gestión-de-la-lista-de-películas-por-ver-watchlist&#34;&gt;4. Gestión de la lista de películas por ver (&lt;code&gt;/watchlist&lt;/code&gt;)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Permite a los usuarios añadir y gestionar películas pendientes de ver.&lt;/li&gt;
&lt;li&gt;Validación de &lt;strong&gt;IDs de películas&lt;/strong&gt; antes de añadirlas.&lt;/li&gt;
&lt;li&gt;Manejo de estados de películas vistas/no vistas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Respuestas adecuadas&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;409 Conflict&lt;/code&gt; para películas duplicadas.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;422 Unprocessable Entity&lt;/code&gt; para IDs inválidos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;404 Not Found&lt;/code&gt; para películas inexistentes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;implementación-técnica&#34;&gt;Implementación técnica
&lt;/h2&gt;&lt;h3 id=&#34;tecnologías-utilizadas&#34;&gt;&lt;strong&gt;Tecnologías utilizadas&lt;/strong&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Node.js + Express&lt;/strong&gt;: Desarrollo de la API REST.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQLite&lt;/strong&gt;: Base de datos ligera y eficiente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JWT (jsonwebtoken)&lt;/strong&gt;: Implementación de autenticación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt;: Contenerización del entorno de desarrollo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AWS (EC2, S3, IAM)&lt;/strong&gt;: Infraestructura en la nube.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Packer&lt;/strong&gt;: Creación de imágenes AMI para AWS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terraform&lt;/strong&gt;: Automatización del despliegue en la nube.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;persistencia-y-base-de-datos&#34;&gt;&lt;strong&gt;Persistencia y base de datos&lt;/strong&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Uso de &lt;strong&gt;SQLite&lt;/strong&gt; para almacenar información de usuarios, películas y valoraciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migraciones y esquema definido&lt;/strong&gt; para garantizar la integridad de los datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ORM Sequelize&lt;/strong&gt; para facilitar la gestión de la base de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;despliegue-en-aws&#34;&gt;&lt;strong&gt;Despliegue en AWS&lt;/strong&gt;
&lt;/h3&gt;&lt;h4 id=&#34;1-creación-de-ami-con-packer&#34;&gt;&lt;strong&gt;1. Creación de AMI con Packer&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;Se generó una &lt;strong&gt;Amazon Machine Image (AMI)&lt;/strong&gt; con la configuración necesaria para ejecutar la API:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Instalación de &lt;strong&gt;Node.js&lt;/strong&gt; y dependencias.&lt;/li&gt;
&lt;li&gt;Configuración del entorno y variables necesarias.&lt;/li&gt;
&lt;li&gt;Creación de un script para la ejecución automática del servicio.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;2-infraestructura-con-terraform&#34;&gt;&lt;strong&gt;2. Infraestructura con Terraform&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;Se implementó la infraestructura con &lt;strong&gt;Terraform&lt;/strong&gt;, asegurando escalabilidad y automatización:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Instancia EC2&lt;/strong&gt; configurada con la AMI generada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Balanceador de carga&lt;/strong&gt; para distribuir el tráfico.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto Scaling Group&lt;/strong&gt; para aumentar o reducir instancias según demanda.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Almacenamiento en RDS&lt;/strong&gt; para persistencia de datos en la nube.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestión de IAM roles y permisos&lt;/strong&gt; para garantizar la seguridad.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;automatización-y-escalabilidad&#34;&gt;&lt;strong&gt;Automatización y escalabilidad&lt;/strong&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Infraestructura autoscalable&lt;/strong&gt; que permite ajustar el número de instancias en función de la carga.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manejo de errores&lt;/strong&gt; para garantizar alta disponibilidad y minimizar tiempos de inactividad.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persistencia de datos&lt;/strong&gt; asegurada con almacenamiento en AWS.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;conclusiones-y-aprendizajes&#34;&gt;Conclusiones y aprendizajes
&lt;/h2&gt;&lt;p&gt;Este proyecto permitió consolidar conocimientos en &lt;strong&gt;desarrollo backend con Express&lt;/strong&gt;, autenticación JWT, bases de datos &lt;strong&gt;SQL&lt;/strong&gt;, así como en &lt;strong&gt;infraestructura cloud y automatización del despliegue&lt;/strong&gt; en AWS. Se aplicaron buenas prácticas de seguridad, validaciones de datos y manejo de errores, logrando un sistema robusto y escalable.&lt;/p&gt;
&lt;h2 id=&#34;recursos-y-código-fuente&#34;&gt;Recursos y código fuente
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/israelbrea12/Despliegue-API-express-AWS.git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Repositorio en GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;../mimo_movies.yaml&#34; &gt;Documentación OpenAPI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Procesamiento de XML con DOM y SAX</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/procesamiento-xml/</link>
        <pubDate>Sun, 02 Feb 2025 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/procesamiento-xml/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/xml-processing/domsax.png" alt="Featured image of post Procesamiento de XML con DOM y SAX" /&gt;&lt;p&gt;Este proyecto fue desarrollado para la asignatura de Tecnologías del lado del servidor: Cloud Computing como parte del máster universitario oficial en Informática Móvil (MIMO).&lt;/p&gt;
&lt;p&gt;El objetivo principal fue implementar una aplicación en &lt;strong&gt;Java&lt;/strong&gt; capaz de procesar un canal de noticias en &lt;strong&gt;formato RSS (XML)&lt;/strong&gt; y generar &lt;strong&gt;archivos de salida en XML y JSON&lt;/strong&gt;, aplicando técnicas modernas de procesamiento y herramientas específicas.&lt;/p&gt;
&lt;h2 id=&#34;funcionalidades-principales&#34;&gt;Funcionalidades principales
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;1. Procesamiento de XML&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Implementación de dos versiones del procesamiento del archivo RSS:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DOM (Document Object Model)&lt;/strong&gt;: Carga el documento completo en memoria y permite una navegación estructurada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SAX (Simple API for XML)&lt;/strong&gt;: Lectura secuencial del archivo, más eficiente para grandes volúmenes de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Extracción y presentación de la información clave:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Del canal&lt;/strong&gt;: Título, URL, descripción.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;De las noticias&lt;/strong&gt;: Título, URL, descripción, fecha de publicación y categoría.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. Generación de archivos de salida&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;XML&lt;/strong&gt;: Archivo estructurado con los títulos de las noticias en el formato:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;noticias&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;canal=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;título del canal&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;noticia&amp;gt;&lt;/span&gt;título noticia 1&lt;span class=&#34;nt&#34;&gt;&amp;lt;/noticia&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;noticia&amp;gt;&lt;/span&gt;título noticia 2&lt;span class=&#34;nt&#34;&gt;&amp;lt;/noticia&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/noticias&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;JSON&lt;/strong&gt;: Archivo equivalente, generado con el formato:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;noticias&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;noticia&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;título noticia 1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;noticia&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;título noticia 2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;3. Conversión con GSON&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Uso de la librería GSON para la serialización y deserialización entre objetos Java y JSON, asegurando una manipulación sencilla y eficiente de los datos.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/israelbrea12/Procesamiento-DOM-JAVA.git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ver repositorio en GitHub de procesamiento con DOM&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/israelbrea12/Procesamiento-SAX-JAVA.git&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ver repositorio en GitHub de procesamiento con SAX&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>LikeMovies</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/likemovies/</link>
        <pubDate>Sat, 01 Feb 2025 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/likemovies/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/likemovies/likemovies.png" alt="Featured image of post LikeMovies" /&gt;&lt;p&gt;Este proyecto fue desarrollado para la asignatura de Tecnologías del lado del cliente: HTML5 como parte del máster universitario oficial en Informática Móvil (MIMO).&lt;/p&gt;
&lt;p&gt;El objetivo principal del proyecto fue &lt;strong&gt;crear una aplicación web híbrida para la gestión y exploración de películas&lt;/strong&gt;, aprovechando tecnologías modernas como &lt;strong&gt;Angular&lt;/strong&gt;, &lt;strong&gt;Ionic&lt;/strong&gt; y servicios como &lt;strong&gt;Firebase&lt;/strong&gt; para autenticación y almacenamiento local con Ionic Storage.&lt;/p&gt;
&lt;h2 id=&#34;funcionalidades-principales&#34;&gt;Funcionalidades principales
&lt;/h2&gt;&lt;p&gt;La aplicación &lt;strong&gt;LikeMovies&lt;/strong&gt; permite a los usuarios:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Explorar películas&lt;/strong&gt;: Consumir la API de TMDB para listar películas populares, por género o próximas a estrenarse en España.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gestión personalizada&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Añadir películas a listas como &amp;ldquo;Favoritos&amp;rdquo; o &amp;ldquo;Mi Lista&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Configurar recordatorios para estrenos próximos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autenticación segura&lt;/strong&gt;: Registro e inicio de sesión mediante Firebase Authentication.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interfaz responsiva&lt;/strong&gt;: Adaptada para múltiples dispositivos, garantizando una experiencia fluida.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;estructura-de-la-aplicación&#34;&gt;Estructura de la aplicación
&lt;/h2&gt;&lt;p&gt;La aplicación está organizada en varias secciones accesibles mediante un sistema de navegación con tabs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Para ti&lt;/strong&gt;: Pantalla principal donde el usuario puede buscar películas, filtrarlas por género y visualizarlas en una cuadrícula interactiva.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estrenos&lt;/strong&gt;: Listado de películas próximas a estrenarse, con opción para añadir recordatorios. Incluye un &lt;strong&gt;scroll infinito&lt;/strong&gt; para cargar más resultados dinámicamente al desplazarse.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mi perfil&lt;/strong&gt;: Permite al usuario gestionar sus datos personales y visualizar sus listas personalizadas de favoritos y recordatorios.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detalle de película&lt;/strong&gt;: Muestra información completa de una película, incluyendo descripción, géneros y puntuación, con opciones para gestionar favoritos y listas.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;características-técnicas-destacadas&#34;&gt;Características técnicas destacadas
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Consumo de API&lt;/strong&gt;: Uso de la API de TMDB para obtener datos de películas, gestionado mediante un servicio Angular que interactúa con los endpoints REST.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persistencia de datos&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Firebase Authentication&lt;/strong&gt;: Manejo de usuarios y autenticación segura.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ionic Storage&lt;/strong&gt;: Almacenamiento local para listas y recordatorios.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guards de autenticación&lt;/strong&gt;: Implementación de un Guard para garantizar que solo los usuarios autenticados puedan acceder a las funcionalidades de la aplicación. Redirige automáticamente a la página de inicio de sesión si no se ha iniciado sesión.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scroll infinito&lt;/strong&gt;: Integrado en la sección de &amp;ldquo;Estrenos&amp;rdquo;, permite una experiencia de usuario mejorada al cargar dinámicamente más datos conforme el usuario se desplaza hacia abajo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Swiper.js&lt;/strong&gt;: Uso de la librería Swiper.js para crear carruseles interactivos y responsivos, utilizados en secciones como &amp;ldquo;Favoritos&amp;rdquo; y &amp;ldquo;Recordatorios&amp;rdquo; para destacar películas de forma atractiva.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diseño responsivo&lt;/strong&gt;: Uso de media queries, flexbox y grid para garantizar adaptabilidad en distintos dispositivos.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;conclusión&#34;&gt;Conclusión
&lt;/h2&gt;&lt;p&gt;LikeMovies es un ejemplo práctico de cómo combinar tecnologías modernas como &lt;strong&gt;Angular&lt;/strong&gt; e &lt;strong&gt;Ionic&lt;/strong&gt; con servicios externos como &lt;strong&gt;TMDB&lt;/strong&gt; y &lt;strong&gt;Firebase&lt;/strong&gt;, ofreciendo una solución completa y profesional para la gestión de películas. El proyecto destaca por su arquitectura modular, su enfoque en la responsividad y su integración fluida con APIs y almacenamiento.&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;../documentacion_html5.pdf&#34; &gt;Ver documentación en pdf&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;video-funcionalidad-likemovies&#34;&gt;Video Funcionalidad LikeMovies
&lt;/h2&gt;&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/GveLpWewbkg&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

</description>
        </item>
        <item>
        <title>SCORECARD TPNi CG</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/scorecard/</link>
        <pubDate>Sun, 06 Oct 2024 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/scorecard/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/scorecard/appscore.png" alt="Featured image of post SCORECARD TPNi CG" /&gt;&lt;p&gt;SCORECARD TPNi CG es una aplicación móvil nativa diseñada y desarrollada para &lt;strong&gt;identificar pacientes de alto riesgo&lt;/strong&gt; en cirugía abdominal y colorrectal, facilitando la aplicación de terapia de presión negativa de un solo uso cuando sea adecuado. Basada en la evidencia clínica, esta herramienta optimiza la prevención de complicaciones en el sitio quirúrgico, mejorando la recuperación y reduciendo costes para el sistema sanitario. Este proyecto fue realizado para la empresa &lt;strong&gt;FOINCO Formación Investigación Coloproctología&lt;/strong&gt; y en colaboración con &lt;strong&gt;Smith &amp;amp; Nephew&lt;/strong&gt;, y ha sido avalado por entidades como el Grupo Español de Rehabilitación Multimodal (GERM), la Asociación Española de Coloproctología (AECP) y el Observatorio de Infección en Cirugía.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-scorecard-tpni-cg&#34;&gt;¿Qué es SCORECARD TPNi CG?
&lt;/h2&gt;&lt;p&gt;La aplicación tiene como objetivo principal ayudar a los profesionales de la salud a identificar si un paciente quirúrgico presenta un riesgo elevado de complicaciones, basándose en factores como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Factores del paciente&lt;/strong&gt;: edad avanzada, inmunosupresión, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Factores quirúrgicos&lt;/strong&gt;: tiempo quirúrgico prolongado, cirugías iterativas, entre otros.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los escenarios de riesgo se determinan utilizando la Tabla de Consenso de CSQ, proporcionando una recomendación clara:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pacientes de riesgo&lt;/strong&gt;: sugerencia de usar terapia de presión negativa (TPN) de un solo uso durante 7 días, desarrollada por Smith &amp;amp; Nephew.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pacientes sin riesgo&lt;/strong&gt;: recomendación de usar un apósito postquirúrgico estándar.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;qué-incluye-la-aplicación&#34;&gt;¿Qué incluye la aplicación?
&lt;/h2&gt;&lt;p&gt;SCORECARD TPNi CG está estructurada en secciones clave que garantizan su funcionalidad y valor educativo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sección de cálculo del riesgo&lt;/strong&gt;: Permite al usuario introducir los datos del paciente y del procedimiento quirúrgico para obtener la recomendación asociada.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mecanismo de acción&lt;/strong&gt;: Explica los beneficios y fundamentos del sistema de terapia de presión negativa de un solo uso.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estudios y bibliografía&lt;/strong&gt;: Reúne evidencia científica que respalda las recomendaciones y funcionalidades de la aplicación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preguntas frecuentes&lt;/strong&gt;: Proporciona respuestas a dudas comunes sobre el uso de TPN y la prevención de CSQ.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;desarrollo-y-publicación&#34;&gt;Desarrollo y publicación
&lt;/h2&gt;&lt;p&gt;Esta aplicación fue desarrollada de manera completamente nativa para &lt;strong&gt;iOS&lt;/strong&gt; (utilizando Swift y la arquitectura MVC) y &lt;strong&gt;Android&lt;/strong&gt; (con Kotlin y la arquitectura MVVM). Gestioné todas las fases del ciclo de desarrollo de software, desde la planificación inicial hasta la publicación en las tiendas de aplicaciones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Google Play Store&lt;/strong&gt; y &lt;strong&gt;Apple App Store&lt;/strong&gt; bajo el nombre SCORECARD TPNi CG.&lt;/li&gt;
&lt;li&gt;Disponible también en la página oficial de la &lt;strong&gt;AECP&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;avales-y-reconocimientos&#34;&gt;Avales y Reconocimientos
&lt;/h2&gt;&lt;p&gt;La aplicación cuenta con el respaldo de instituciones clave en el ámbito quirúrgico y de salud:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Grupo Español de Rehabilitación Multimodal (GERM)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Asociación Española de Coloproctología (AECP)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observatorio de Infección en Cirugía&lt;/strong&gt;.
SCORECARD TPNi CG es una herramienta que no solo mejora la toma de decisiones clínicas, sino que también fortalece la práctica quirúrgica basada en evidencia.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;video-scorecard-tpni-cg&#34;&gt;Video SCORECARD TPNi CG
&lt;/h2&gt;&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/HTDZi5vAgok&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

</description>
        </item>
        <item>
        <title>Creación y despliegue de portfolio web con Hugo.</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/hugo-web/</link>
        <pubDate>Sun, 01 Sep 2024 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/hugo-web/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/hugo-web/hugo-portfolio.png" alt="Featured image of post Creación y despliegue de portfolio web con Hugo." /&gt;&lt;h2 id=&#34;descripción-del-proyecto&#34;&gt;Descripción del Proyecto
&lt;/h2&gt;&lt;p&gt;Este proyecto personal tiene como objetivo no solo crear una página web que reúna todos los proyectos que he desarrollado durante mi carrera académica y personal, sino también desplegarla en mi propio servidor, haciéndola accesible de manera segura desde Internet.&lt;/p&gt;
&lt;p&gt;## Desarrollo Web
Para la construcción de mi portfolio elegí &lt;strong&gt;Hugo&lt;/strong&gt;, una plataforma de generación de sitios web estáticos que permite crear páginas modernas de frontend utilizando archivos &lt;strong&gt;Markdown&lt;/strong&gt;. La decisión de usar Hugo se basó en que ya había redactado una parte de mi portfolio en Obsidian, una herramienta (donde también se escribe en Markdown) que utilizo habitualmente para tomar notas y organizar mis apuntes. La capacidad de Hugo para aprovechar archivos en formato Markdown me permitió migrar este contenido fácilmente y enfocarme más en la calidad del contenido que en el desarrollo técnico.&lt;/p&gt;
&lt;p&gt;El tema que seleccioné para mi portfolio es &lt;a class=&#34;link&#34; href=&#34;https://github.com/CaiJimmy/hugo-theme-stack&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;hugo-theme-stack&lt;/a&gt;, debido a su formato limpio y moderno, que se ajusta perfectamente a la estructura y diseño que buscaba. Esta plantilla, con su enfoque en el rendimiento y la simplicidad, me permitió optimizar el desarrollo de mi portfolio sin necesidad de invertir demasiado tiempo en el diseño de la interfaz .&lt;/p&gt;
&lt;h2 id=&#34;devops-y-despliegue&#34;&gt;DevOps y Despliegue
&lt;/h2&gt;&lt;p&gt;En cuanto al despliegue y la gestión operativa, mi portfolio está alojado en un &lt;strong&gt;servidor Raspberry Pi 5 con 8 GB de RAM&lt;/strong&gt;, lo que proporciona una solución eficiente y de bajo consumo energético. Para garantizar un entorno seguro y aislado, utilizo Docker, donde el portfolio se ejecuta dentro de un contenedor. Esto me permite empaquetar la aplicación de forma independiente del resto del sistema, facilitando la gestión y evitando conflictos con otros servicios que corren en el mismo servidor.&lt;/p&gt;
&lt;p&gt;El servidor web que gestiona las peticiones es &lt;strong&gt;Caddy&lt;/strong&gt;, una solución ligera que me permite asegurar la conexión con HTTPS de manera automática y redirigir el tráfico a los diferentes servicios que tengo desplegados. Además de mi propio portfolio, también alojo el portfolio de un compañero de carrera, aprovechando la capacidad del servidor para manejar múltiples sitios web.&lt;/p&gt;
&lt;p&gt;Para el desarrollo, suelo trabajar en local utilizando &lt;strong&gt;Visual Studio Code&lt;/strong&gt;, aunque en ocasiones utilizo &lt;strong&gt;GitHub Codespaces&lt;/strong&gt; cuando prefiero trabajar en un entorno remoto. El proceso de despliegue es sencillo: me conecto al servidor mediante SSH, realizo un pull de los últimos cambios desde GitHub y reinicio el contenedor Docker que ejecuta Hugo. Este flujo de trabajo está automatizado mediante un archivo Docker Compose, lo que simplifica el proceso de levantar la aplicación web con cada actualización .&lt;/p&gt;
</description>
        </item>
        <item>
        <title>GoodSurgery</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/goodsurgery/</link>
        <pubDate>Thu, 06 Jun 2024 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/goodsurgery/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/goodsurgery/image-goodsurgery.png" alt="Featured image of post GoodSurgery" /&gt;&lt;p&gt;Este proyecto fue desarrollado durante mi Trabajo de Fin de Grado (TFG) en mi cuarto año de carrera. Su objetivo principal era crear una aplicación móvil para Android que mejorara la experiencia perioperatoria de los pacientes, proporcionando información accesible y detallada sobre los procedimientos quirúrgicos. La finalidad era reducir la ansiedad preoperatoria, mejorar la comunicación entre el equipo médico y el paciente, y aumentar la satisfacción general con el proceso quirúrgico. Para probar la aplicación y obtener resultados reales se realizó un estudio prospectivo piloto para evaluar su impacto. Este trabajo se llevó a cabo en colaboración con el Hospital Universitario Virgen del Rocío.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-goodsurgery&#34;&gt;¿Qué es GoodSurgery?
&lt;/h2&gt;&lt;p&gt;GoodSurgery es una aplicación diseñada para ofrecer a los pacientes una guía clara y completa sobre los procedimientos quirúrgicos colorrectales. La herramienta está estructurada en secciones que abordan el preoperatorio, el postoperatorio y la información general del proceso quirúrgico, adaptándose al tipo de intervención específica de cada paciente. Su diseño intuitivo permite acceder fácilmente a contenidos útiles en cualquier momento, ayudando a los pacientes a comprender y prepararse mejor para su cirugía.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-se-creó&#34;&gt;¿Por qué se creó?
&lt;/h2&gt;&lt;p&gt;GoodSurgery nace con el propósito de mejorar la comunicación entre pacientes y profesionales sanitarios en un momento crucial del proceso quirúrgico. En muchas ocasiones, la cantidad de información médica puede ser abrumadora, generando dudas e incertidumbre en los pacientes. Esta aplicación pretende aliviar esas preocupaciones, actuando como un recurso confiable y accesible que refuerza las explicaciones del equipo médico. Además, fomenta la adherencia del paciente a las indicaciones médicas, promoviendo una recuperación más rápida y efectiva, y contribuyendo a una experiencia quirúrgica más satisfactoria.&lt;/p&gt;
&lt;h2 id=&#34;estudio-piloto&#34;&gt;Estudio Piloto
&lt;/h2&gt;&lt;p&gt;Se llevó a cabo un &lt;strong&gt;estudio prospectivo piloto para evaluar la efectividad de GoodSurgery&lt;/strong&gt;. Este incluyó dos grupos de pacientes diagnosticados con cáncer colorrectal: un grupo de estudio que utilizó la aplicación y un grupo de control que no la utilizó. El cuestionario aplicado a los participantes evaluó aspectos como la claridad de la información, la ansiedad preoperatoria, la facilidad de uso de la aplicación y la satisfacción general.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Proceso del estudio&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Población de estudio&lt;/strong&gt;: Se seleccionaron pacientes con acceso a dispositivos Android que estaban programados para cirugía colorrectal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metodología&lt;/strong&gt;: Se aplicó un cuestionario predefinido a ambos grupos para comparar los resultados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Variables analizadas&lt;/strong&gt;: Claridad de la información, nivel de ansiedad, facilidad de uso, disponibilidad de información y satisfacción general.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;resultados&#34;&gt;Resultados
&lt;/h2&gt;&lt;p&gt;Los resultados del estudio piloto revelaron los siguientes puntos clave:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Claridad de la información&lt;/strong&gt;: Los pacientes que utilizaron GoodSurgery percibieron la información como más clara y comprensible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Facilidad de uso&lt;/strong&gt;: La aplicación fue calificada como intuitiva y fácil de usar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ansiedad preoperatoria&lt;/strong&gt;: Aunque no se observaron diferencias estadísticamente significativas en la reducción de la ansiedad entre ambos grupos, los usuarios de la aplicación destacaron sentirse más preparados para el procedimiento.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Satisfacción general&lt;/strong&gt;: La mayoría de los pacientes calificaron la experiencia con la aplicación como positiva, destacando su utilidad para resolver dudas y ofrecer información en el momento oportuno.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Documentación del proyecto: &lt;a class=&#34;link&#34; href=&#34;https://drive.google.com/file/d/1KnBXEPN2KAIm_uXqRw_Mo02ZxGm3OaqJ/view?usp=sharing&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Visualizar documentación en pdf&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;video-goodsurgery&#34;&gt;Video GoodSurgery
&lt;/h2&gt;&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/9BzRi1fJnh4&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

</description>
        </item>
        <item>
        <title>Análisis de Tweets y Recomendación de Películas</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/tweets-peliculas/</link>
        <pubDate>Sat, 25 May 2024 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/tweets-peliculas/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/tweet-film/analisis-tweets-recomendacion-peliculas.png" alt="Featured image of post Análisis de Tweets y Recomendación de Películas" /&gt;&lt;p&gt;Este proyecto fue desarrollado durante la asignatura de Minería de Datos Clínicos (MDC) durante mi cuarto año de carrera.&lt;/p&gt;
&lt;h2 id=&#34;descripción-del-proyecto&#34;&gt;Descripción del proyecto:
&lt;/h2&gt;&lt;p&gt;Este proyecto consiste en el desarrollo de un sistema de recomendación de películas personalizado que utiliza tweets para identificar las preferencias cinematográficas de los usuarios. El sistema es capaz de analizar los tweets de usuarios específicos, comprender si la película mencionada es de su agrado y extraer información relevante para generar recomendaciones basadas en los gustos individuales.&lt;/p&gt;
&lt;h2 id=&#34;qué-hace-el-sistema-de-recomendación-de-películas&#34;&gt;¿Qué hace el sistema de recomendación de películas?
&lt;/h2&gt;&lt;p&gt;El sistema recoge tweets en español, analiza el sentimiento para determinar si el usuario disfrutó o no de la película y utiliza un modelo de aprendizaje automático para identificar las películas mencionadas. A través de algoritmos de Procesamiento de Lenguaje Natural (PLN) y análisis de hashtags, el sistema clasifica los tweets, extrae las películas mencionadas y ajusta las recomendaciones de acuerdo con los géneros y las preferencias detectadas.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-se-creó&#34;&gt;¿Por qué se creó?
&lt;/h2&gt;&lt;p&gt;El proyecto nace con el propósito de automatizar la forma en que los usuarios reciben recomendaciones de películas, utilizando opiniones reales y dinámicas extraídas de las redes sociales. En lugar de basarse en reseñas convencionales, el sistema emplea la información que los usuarios comparten en sus tweets, proporcionando recomendaciones personalizadas basadas en gustos expresados de manera natural y espontánea en la red social.&lt;/p&gt;
&lt;h2 id=&#34;proceso-del-sistema&#34;&gt;Proceso del sistema:
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Extracción de Tweets&lt;/strong&gt;: Se obtienen tweets en los que se mencione alguna película y se identifique si al usuario le ha gustado o no.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Análisis de Sentimientos&lt;/strong&gt;: Se evalúan los tweets mediante técnicas de PLN para clasificar las opiniones como positivas o negativas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identificación de Películas&lt;/strong&gt;: Mediante el análisis de hashtags y la normalización del texto, el sistema identifica las películas mencionadas en los tweets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generación de Recomendaciones&lt;/strong&gt;: Basado en un algoritmo de recomendación, se asigna una puntuación a diferentes películas según las preferencias del usuario, proporcionando una lista final de las 20 películas más adecuadas.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;visualizar-presentación-del-proyecto-en-pdf&#34;&gt;Visualizar presentación del proyecto en pdf
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://drive.google.com/file/d/1GETBFcsFC989IEUlwEn49sH4ZZW2ghdP/view?usp=sharing&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Proyecto análisis de Tweets y recomendación de películas&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>AVI Health</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/avihealth/</link>
        <pubDate>Wed, 10 Jan 2024 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/avihealth/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/avihealth/avi-health.png" alt="Featured image of post AVI Health" /&gt;&lt;p&gt;Este proyecto fue desarrollado durante la asignatura de Gestión de Servicios y Tecnologías de la Información (GSTI) durante mi cuarto año de carrera. El objetivo principal del proyecto era desarrollar una aplicación móvil Android que cubriera la necesidad de teleasistencia de un proceso asistencial integrado (PAI) modelado por el Servicio Andaluz de Salud (SAS). En concreto, esta aplicación se centra en el proceso asistencial de teleasistencia dermatológica de pacientes con cáncer de piel.&lt;/p&gt;
&lt;h2 id=&#34;descripción-del-proyecto&#34;&gt;Descripción del proyecto:
&lt;/h2&gt;&lt;p&gt;Este proyecto consiste en el desarrollo de una aplicación Android para agilizar la gestión del Proceso Asistencial Integrado (PAI) del cáncer de piel, utilizando Firebase para la gestión de datos en tiempo real. La aplicación facilita la comunicación instantánea entre el paciente y el dermatólogo, mejorando la eficiencia del tratamiento.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-avi-health&#34;&gt;¿Qué es AVI Health?
&lt;/h2&gt;&lt;p&gt;AVI Health es una aplicación que permite a los pacientes realizar consultas dermatológicas, programar citas, y gestionar teleconsultas con sus médicos desde una plataforma accesible y fácil de usar. A su vez, los médicos pueden gestionar las consultas y responder a las solicitudes en tiempo real, proporcionando una atención más eficiente y cercana al paciente. Además, esta aplicación proporciona un entorno que permite al paciente compartir imágenes de su evolución con el dermatólogo, quien puede responder y hacer un seguimiento casi inmediato, reduciendo los tiempos de espera habituales. Todo esto se logra integrando Firebase como plataforma de backend para el almacenamiento de datos y la gestión de usuarios lo que asegura la escalabilidad del sistema y la protección ante pérdidas.&lt;/p&gt;
&lt;p&gt;Además la aplicación incluye otras funcionalidades clave como el acceso a la ubicación de centros médicos cercanos en Google Maps, la gestión de perfiles tanto de médicos como de pacientes&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;por-qué-se-creó&#34;&gt;¿Por qué se creó?
&lt;/h2&gt;&lt;p&gt;El objetivo principal de esta aplicación es mejorar la atención al paciente y la toma de decisiones durante el proceso de tratamiento del cáncer de piel. Este tipo de cáncer afecta a miles de personas, y los tiempos de espera para consultas y diagnósticos pueden afectar negativamente el tratamiento. Con esta herramienta, se busca agilizar la comunicación entre médicos y pacientes, proporcionando una plataforma que permita gestionar consultas y teleconsultas de forma instantánea, lo que es clave en la era de la e-Health.&lt;/p&gt;
&lt;p&gt;Documentación del proyecto: &lt;a class=&#34;link&#34; href=&#34;https://drive.google.com/file/d/1n8zqS8DPVCQBiIJugbRNuOr62nXAK_mt/view?usp=sharing&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Visualizar documentación en pdf&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;video-avi-health&#34;&gt;Video AVI Health
&lt;/h2&gt;&lt;div class=&#34;video-wrapper&#34;&gt;
    &lt;iframe loading=&#34;lazy&#34; 
            src=&#34;https://www.youtube.com/embed/AJDppUNHN4E&#34; 
            allowfullscreen 
            title=&#34;YouTube Video&#34;
    &gt;
    &lt;/iframe&gt;
&lt;/div&gt;

</description>
        </item>
        <item>
        <title>Despliegue de servicio web con EC2 AWS</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/aws-ec2/</link>
        <pubDate>Wed, 15 Nov 2023 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/aws-ec2/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/aws-ec2/aws.png" alt="Featured image of post Despliegue de servicio web con EC2 AWS" /&gt;&lt;p&gt;Este proyecto fue desarrollado para un trabajo de la asignatura Arquitecturas de Sistemas y Sistemas Distribuidos (ASSB) durante mi cuarto año de carrera. El objetivo principal era desplegar servicio web funcional en un entorno en la nube utilizando los servicios de &lt;strong&gt;AWS&lt;/strong&gt;, manteniéndonos dentro de los límites del plan gratuito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Este servicio web se conformaba por un balancedor de carga que distribuía las solicitudes entre dos instancias de EC2, cada una con su propio servidor Apache y página web.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Las principales tareas realizadas incluyeron:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Control y creación de alertas de costes&lt;/strong&gt;: Configuración de alertas en AWS para asegurar que todas las operaciones se ajustaran al plan gratuito, evitando cargos adicionales no deseados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Despliegue de instancias EC2&lt;/strong&gt;: Levantar dos instancias de &lt;strong&gt;EC2&lt;/strong&gt; y conectarnos a ellas mediante &lt;strong&gt;SSH&lt;/strong&gt;. En cada una de las instancias, instalar el servidor web &lt;strong&gt;Apache&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuración de servidores web&lt;/strong&gt;: Configuración de los servicios de Apache en ambas instancias para que sirvieran una página web estática creada por mi mismo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Implementación de un balanceador de carga&lt;/strong&gt;: Despliegue de un balanceador de carga en AWS, que distribuye de manera equitativa las peticiones entrantes entre los dos servidores Apache, optimizando la carga y asegurando una mayor disponibilidad.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;../aws-ec2.pdf&#34; &gt;&lt;strong&gt;Visualizar memoria en pdf&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Datathon Andalucía Dedalus</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/datathon/</link>
        <pubDate>Mon, 20 Feb 2023 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/datathon/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/datathon-en/dedalus.png" alt="Featured image of post Datathon Andalucía Dedalus" /&gt;&lt;p&gt;Este proyecto fue desarrollado durante mi tercer año de carrera para el Datathon organizado por Dedalus y AWS en Andalucía, en colaboración con dos compañeros de carrera. El principal objetivo de este datathon era trabajar con un conjunto de datos proporcionados sobre pacientes ingresados en Unidades de Cuidados Intensivos (UCI), para extraer valor clínico mediante análisis de cohortes y la creación de modelos predictivos. Se buscaba con este concurso generar información relevante para mejorar la eficiencia hospitalaria y optimizar la toma de decisiones en contextos clínicos.&lt;/p&gt;
&lt;h2 id=&#34;análisis-de-cohortes&#34;&gt;Análisis de Cohortes
&lt;/h2&gt;&lt;p&gt;El análisis de cohortes fue uno de los pilares fundamentales del proyecto, ya que nos permitió identificar patrones clave entre los pacientes hospitalizados.&lt;/p&gt;
&lt;p&gt;Realizamos un &lt;strong&gt;análisis específico sobre pacientes con problemas cardiovasculares&lt;/strong&gt;. Este análisis incluyó varios aspectos importantes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El porcentaje de casos en función del género, que nos ayudó a identificar posibles diferencias en la prevalencia de los problemas cardiovasculares entre hombres y mujeres.&lt;/li&gt;
&lt;li&gt;La distribución de casos en relación con la edad, lo que permitió obtener un panorama claro sobre las franjas etarias más afectadas.
El número de casos según el índice de masa corporal (IMC), que proporcionó una perspectiva sobre cómo el IMC influye en la incidencia de estas patologías.&lt;/li&gt;
&lt;li&gt;El porcentaje de mortalidad en función del IMC, revelando posibles correlaciones entre el peso corporal y los desenlaces fatales en pacientes con problemas cardiovasculares.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Realizamos un análisis de cohortes más general para todos los pacientes ingresados en la UCI. Este estudio incluyó:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El número de ingresos y altas en la UCI en distintas franjas horarias, lo que proporcionó información sobre los momentos del día en los que se producían más admisiones.&lt;/li&gt;
&lt;li&gt;La tasa de mortalidad de los pacientes en función del diagnóstico, arrojando luz sobre cuáles eran las patologías más críticas en términos de supervivencia.&lt;/li&gt;
&lt;li&gt;El tiempo de estancia en UCI según cada diagnóstico, lo que facilitó la identificación de los tratamientos y patologías que requerían mayor tiempo de hospitalización.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;comparativa-de-hospitales&#34;&gt;Comparativa de Hospitales
&lt;/h2&gt;&lt;p&gt;Otro aspecto destacado del proyecto fue el análisis comparativo entre diferentes hospitales. En este análisis, evaluamos el rendimiento de los hospitales en función de su capacidad para tratar patologías críticas, utilizando la mortalidad como indicador clave. Este análisis nos permitió comparar la eficiencia de los hospitales en el tratamiento de ciertos diagnósticos y patologías, además de explorar el tiempo medio de estancia en la UCI por cada hospital. Con esta información, pudimos identificar posibles áreas de mejora en la gestión hospitalaria y la atención clínica en diferentes centros de salud.&lt;/p&gt;
&lt;h2 id=&#34;modelos-predictivos&#34;&gt;Modelos Predictivos
&lt;/h2&gt;&lt;p&gt;La comunicación entre el cliente y el servidor se realizó mediante sockets SSL (Secure Sockets Layer), sobre los cuales se integró el protocolo TLS. En ambos extremos, cliente y servidor, se configuraron sockets seguros que permitían la transmisión de datos encriptados. El servidor estaba diseñado para escuchar conexiones entrantes en un puerto específico (en este caso, el puerto 3343), autenticando a los clientes mediante la verificación de sus credenciales.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;../dedalus.jpeg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Foto grupal Datathon Dedalus&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;Presentación: &lt;a class=&#34;link&#34; href=&#34;../ATENAS_Datathon_Dedalus.pdf&#34; &gt;Visualizar presentación en pdf&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Aplicación web para la gestión de camillas hospitalarias</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/cgis-laravel-camillas/</link>
        <pubDate>Sun, 01 Jan 2023 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/cgis-laravel-camillas/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/cgis-laravel-stretchers/cgis-camillas.png" alt="Featured image of post Aplicación web para la gestión de camillas hospitalarias" /&gt;&lt;p&gt;Este proyecto fue desarrollado para la asignatura de Codificación y gestión de información sanitaria (CGIS) durante mi tercer año de carrera. El objetivo principal es diseñar, modelar y desarrollar una aplicación web para la gestión de las camillas hospitalarias de una entidad sanitaria.&lt;/p&gt;
&lt;div class=&#34;image-gallery&#34;&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;cgis1.png&#34;&gt;&lt;img src=&#34;cgis1.png&#34; alt=&#34;Imagen 1&#34;&gt;&lt;/a&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;cgis2.png&#34;&gt;&lt;img src=&#34;cgis2.png&#34; alt=&#34;Imagen 2&#34;&gt;&lt;/a&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;cgis3.png&#34;&gt;&lt;img src=&#34;cgis3.png&#34; alt=&#34;Imagen 3&#34;&gt;&lt;/a&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;cgis4.png&#34;&gt;&lt;img src=&#34;cgis4.png&#34; alt=&#34;Imagen 4&#34;&gt;&lt;/a&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;cgis5.png&#34;&gt;&lt;img src=&#34;cgis5.png&#34; alt=&#34;Imagen 5&#34;&gt;&lt;/a&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;cgis6.png&#34;&gt;&lt;img src=&#34;cgis6.png&#34; alt=&#34;Imagen 6&#34;&gt;&lt;/a&gt;
    &lt;a data-fancybox=&#34;gallery&#34; href=&#34;cgis7.png&#34;&gt;&lt;img src=&#34;cgis7.png&#34; alt=&#34;Imagen 7&#34;&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h2 id=&#34;indice&#34;&gt;Indice
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#dominio-del-problema&#34; &gt;Dominio del problema&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#objetivos&#34; &gt;Objetivos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#usuarios-del-sistema&#34; &gt;Usuarios del sistema&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#cat%c3%a1logo-de-requisitos&#34; &gt;Catálogo de requisitos&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;4.1 &lt;a class=&#34;link&#34; href=&#34;#requisitos-de-informaci%c3%b3n&#34; &gt;Requisitos de información&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;4.2 &lt;a class=&#34;link&#34; href=&#34;#requisitos-funcionales&#34; &gt;Requisitos funcionales&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;4.3 &lt;a class=&#34;link&#34; href=&#34;#requisitos-no-funcionales&#34; &gt;Requisitos no funcionales&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;4.4 &lt;a class=&#34;link&#34; href=&#34;#reglas-de-negocio&#34; &gt;Reglas de negocio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;#modelo-conceptual-uml&#34; &gt;Modelo conceptual UML&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;dominio-del-problema&#34;&gt;Dominio del problema
&lt;/h2&gt;&lt;p&gt;La gestión de camas en un centro hospitalario constituye una de las tareas cotidianas de cualquier servicio de admisión y también una de la que más conflictos provocan en el funcionamiento diario del hospital. La asignación de la cama al paciente que va a ingresar constituye sólo una parte de lo que se denomina Gestión de camas, y afecta tanto a los pacientes que van a ingresar como a los ya ingresados, y a las camas libres tanto como a las ocupadas.&lt;/p&gt;
&lt;h2 id=&#34;objetivos&#34;&gt;Objetivos
&lt;/h2&gt;&lt;p&gt;La exigencia de un adecuado control en la ocupación de camillas hospitalarias hace que se requiera una adecuada gestión de la información, un conocimiento sobre las diferentes salas de camillas, tipos de camillas, ocupación de las mismas, médicos encargados de cada paciente que tendrá una sala asignada, etc.… Dada esta situación, se plantea crear, una aplicación web donde cada usuario tendrá su propio acceso.&lt;/p&gt;
&lt;h2 id=&#34;usuarios-del-sistema&#34;&gt;Usuarios del sistema
&lt;/h2&gt;&lt;p&gt;Los tres usuarios que van a poder acceder al sistema van a ser:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Administrador&lt;/li&gt;
&lt;li&gt;Celador, solo podrá visualizar los datos que le corresponda.&lt;/li&gt;
&lt;li&gt;Médico, solo podrá visualizar los datos que le corresponda.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;catálogo-de-requisitos&#34;&gt;Catálogo de requisitos
&lt;/h2&gt;&lt;h3 id=&#34;requisitos-de-información&#34;&gt;Requisitos de información
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;RI-001. Médicos.&lt;/strong&gt; El sistema deberá de almacenar información sobre los médicos. Nombre y apellido, password, especialidad, fecha de nacimiento, si está vacunado de COVID o no, teléfono, sueldo, y fecha de contratación.&lt;/p&gt;
&lt;p&gt;Cada médico se encargará de (1..N) salas. Un médico se encarga de N pacientes. Un medico tiene (1..N) especialidades.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RI-002. Celadores.&lt;/strong&gt; El sistema deberá de almacenar información sobre los celadores. Nombre y apellido, password, fecha de nacimiento, teléfono, fecha de contratación y sueldo.&lt;/p&gt;
&lt;p&gt;Cada celador se encargará de (1..N) salas. Un celador se encarga de N pacientes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RI-003. Pacientes.&lt;/strong&gt; El sistema deberá de almacenar información sobre los pacientes. Nombre, apellido, nuhsa y patologías.&lt;/p&gt;
&lt;p&gt;Cada paciente tiene (1..N) patologías. 1 paciente está asociado a 1 camilla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RI-004. Salas.&lt;/strong&gt; El sistema deberá de almacenar información sobre las salas. La planta en la que está situada la sala, el número de la sala, número de camillas disponibles en la sala, así como el médico asignado a la sala.&lt;/p&gt;
&lt;p&gt;N salas tiene asociadas N camillas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RI-005. Camillas.&lt;/strong&gt; El sistema deberá de almacenar información sobre las camillas. Tipo de camilla, celador responsable de la camilla, paciente asociado a la camilla, el precio, la fecha de adquisición y la fecha de fin de vida útil.&lt;/p&gt;
&lt;p&gt;N camillas pertenecen a 1 empresa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RI-006. Especialidad.&lt;/strong&gt; El sistema deberá de almacenar información sobre las especialidades de los médicos. Estas pueden ser: cardiólogo, neurólogo, gastroenterólogo, neumólogo y traumatólogo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RI-007. Patología.&lt;/strong&gt; El sistema deberá de almacenar información sobre las patologías de los pacientes. Estas pueden ser: cardiológica, neurológica, gastrointestinal, respiratoria y traumatológica.&lt;/p&gt;
&lt;h3 id=&#34;requisitos-funcionales&#34;&gt;Requisitos funcionales
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;RF-001. Listado de médicos.&lt;/strong&gt; Como administrador, quiero ver un listado de los médicos del sistema paginados de 10 en 10.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-002. Detalle de médico.&lt;/strong&gt; Como administrador,** quiero ver el detalle de un médico.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-003. Creación de médico.&lt;/strong&gt; Como administrador,** quiero crear un médico. Para ello, se debe indicar el nombre y apellido, especialidad, fecha de nacimiento, email, teléfono, DNI, si está vacunado o no de COVID, sueldo, y fecha de contratación. Deberé poder elegir la especialidad del médico entre el listado de especialidades ya existentes en la base de datos del sistema. El sistema debe impedir la creación de médico si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;El email ya existe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;El email no tiene el formato correcto.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;La contraseña no tiene al menos 8 caracteres y viene la contraseña y su confirmación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;El sueldo no puede ser negativo&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;La especialidad tiene que ser una de las ya disponibles en el sistema.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El sistema además deberá mostrar un mensaje de error en cada uno de los casos anteriores y, en caso de éxito, navegar al listado actualizado de médicos con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-004. Edición de médico.&lt;/strong&gt; Como administrador,** quiero editar un médico eligiéndolo a partir del listado de médicos y llevándome a una nueva pantalla donde pueda trabajar con los datos. Para ello, se debe poder modificar el nombre y apellido, email, fecha de contratación, si está vacunado de COVID o no, el sueldo y la especialidad. Deberé poder elegir la especialidad del médico entre el listado de especialidades ya existentes en la base de datos del sistema. El sistema debe impedir la edición de médico si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;El email no tiene el formato correcto.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;La contraseña no tiene al menos 8 caracteres y viene la contraseña y su confirmación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;El sueldo no puede ser negativo&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;La especialidad tiene que ser una de las ya disponibles en el sistema.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El sistema además deberá mostrar un mensaje de error en cada uno de los casos anteriores y, en caso de éxito, navegar al listado actualizado de médicos con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-005. Borrado de médico.&lt;/strong&gt; Como administrador, quiero borrar un médico. El sistema deberá alertarme de la irrevocabilidad de esta acción y pedir confirmación. En caso de confirmación, el sistema deberá borrar el médico y navegar al listado actualizado de médicos con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-006. Listado de médicos.&lt;/strong&gt; Como médico, quiero ver un listado de los médicos del sistema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-007. Detalle de médico.&lt;/strong&gt; Como médico,** quiero ver el detalle de un médico.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-008. Listado de celadores.&lt;/strong&gt; Como administrador, quiero ver un listado de los celadores del sistema paginados de 10 en 10.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-009. Detalle de celador.&lt;/strong&gt; Como administrador,** quiero ver el detalle de un celador.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-010. Creación de celador.&lt;/strong&gt; Como administrador,** quiero crear un celador. Para ello, se debe indicar el nombre y apellido, fecha de nacimiento, teléfono, email, fecha de contratación y sueldo. El sistema debe impedir la creación de celador si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;El email ya existe.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;El email no tiene el formato correcto.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;La contraseña no tiene al menos 8 caracteres y viene la contraseña y su confirmación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;El sueldo no puede ser negativo&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El sistema además deberá mostrar un mensaje de error en cada uno de los casos anteriores y, en caso de éxito, navegar al listado actualizado de celadores con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-011. Edición de celador.&lt;/strong&gt; Como administrador,** quiero editar un celador eligiéndolo a partir del listado de celadores y llevándome a una nueva pantalla donde pueda trabajar con los datos. Para ello, se debe poder modificar el nombre y apellido, fecha de nacimiento, teléfono, email, DNI, fecha de contratación y sueldo. El sistema debe impedir la edición de médico si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;El email no tiene el formato correcto.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;La contraseña no tiene al menos 8 caracteres y viene la contraseña y su confirmación.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;El sueldo no puede ser negativo&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El sistema además deberá mostrar un mensaje de error en cada uno de los casos anteriores y, en caso de éxito, navegar al listado actualizado de médicos con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-012. Borrado de celador.&lt;/strong&gt; Como administrador, quiero borrar un celador. El sistema deberá alertarme de la irrevocabilidad de esta acción y pedir confirmación. En caso de confirmación, el sistema deberá borrar el celador y navegar al listado actualizado de celadores con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-013. Listado de celadores.&lt;/strong&gt; Como celador, quiero ver un listado de todos los celadores del sistema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-014. Detalle de celador.&lt;/strong&gt; Como celador,** quiero ver el detalle de un celador.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-015. Listado de pacientes.&lt;/strong&gt; Como administrador, quiero ver un listado de los pacientes del sistema paginados de 10 en 10.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-016. Detalle de paciente.&lt;/strong&gt; Como administrador,** quiero ver el detalle de un paciente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-017. Creación de paciente.&lt;/strong&gt; Como administrador,** quiero crear un paciente. Para ello, se debe indicar el nombre, apellido, el número de Nusha y patologías. Deberé poder elegir la patología del paciente entre el listado de patologías ya existentes en la base de datos del sistema. El sistema debe impedir la creación de paciente si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La patología tiene que ser una de las ya disponibles en el sistema.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El sistema además deberá mostrar un mensaje de error en cada uno de los casos anteriores y, en caso de éxito, navegar al listado actualizado de pacientes con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-018. Edición de paciente.&lt;/strong&gt; Como administrador,** quiero editar un paciente eligiéndolo a partir del listado de pacientes y llevándome a una nueva pantalla donde pueda trabajar con los datos. Para ello, se debe poder modificar el nombre y apellido, número de Nuhsa y patologías. Deberé poder elegir la patología del paciente entre el listado de patologías ya existentes en la base de datos del sistema. El sistema debe impedir la edición de paciente si:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La patología tiene que ser una de las ya disponibles en el sistema.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El sistema además deberá mostrar un mensaje de error en cada uno de los casos anteriores y, en caso de éxito, navegar al listado actualizado de médicos con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-019. Borrado de paciente.&lt;/strong&gt; Como administrador, quiero borrar un paciente. El sistema deberá alertarme de la irrevocabilidad de esta acción y pedir confirmación. En caso de confirmación, el sistema deberá borrar el paciente y navegar al listado actualizado de pacientes con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-020. Listado de pacientes.&lt;/strong&gt; Como médico, quiero ver un listado de todos los pacientes del sistema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-021. Detalle de paciente.&lt;/strong&gt; Como médico,** quiero ver el detalle de un paciente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-022. Listado de pacientes.&lt;/strong&gt; Como celador, quiero ver un listado de todos los pacientes del sistema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-023. Detalle de paciente.&lt;/strong&gt; Como celador,** quiero ver el detalle de un paciente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-024. Detalles camilla.&lt;/strong&gt; Como celador, quiero una lista donde aparezca toda la información sobre las camillas que tengo asignada.**&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-025. Precio camillas.&lt;/strong&gt; Como administrador, quiero una lista donde aparezca el precio total de las camillas del hospital.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-026. Salas asignadas.&lt;/strong&gt; Como médico, quiero una lista de todas las salas que tengo asignadas, junto a las camillas que pertenecen a la sala.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-027. Camillas asignadas.&lt;/strong&gt; Como celador, quiero una lista de todas las camillas que tengo asignadas, junto al paciente asociado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-028. Costo total inventarios.&lt;/strong&gt; Como administrador, el costo total de las camillas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-029. Costo anual trabajadores.&lt;/strong&gt; Como administrador, quiero ver un listado de los sueldos (el costo que tendría en 12 meses) de cada uno de los trabajadores.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-030. Costo total trabajadores.&lt;/strong&gt; Como administrador, el costo total en un mes de los trabajadores actuales de la empresa.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-031. Listado de patologías.&lt;/strong&gt; Como administrador, quiero ver un listado de todas las patologías del sistema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-032. Creación de patología.&lt;/strong&gt; Como administrador,** quiero crear una patología. Para ello, se debe indicar el nombre de la patología.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-033. Edición de patología.&lt;/strong&gt; Como administrador,** quiero editar una patología eligiéndolo a partir del listado de patologías y llevándome a una nueva pantalla donde pueda trabajar con los datos. Para ello, se debe poder modificar el nombre de la patología.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-034. Borrado de patología.&lt;/strong&gt; Como administrador, quiero borrar una patología. El sistema deberá alertarme de la irrevocabilidad de esta acción y pedir confirmación. En caso de confirmación, el sistema deberá borrar la patología y navegar al listado actualizado de patologías con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-035. Listado de especialidades.&lt;/strong&gt; Como administrador, quiero ver un listado de todas las especialidades del sistema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-036. Creación de especialidad.&lt;/strong&gt; Como administrador,** quiero crear una especialidad. Para ello, se debe indicar el nombre de la especialidad.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-037. Edición de especialidad.&lt;/strong&gt; Como administrador,** quiero editar una especialidad eligiéndolo a partir del listado de especialidades y llevándome a una nueva pantalla donde pueda trabajar con los datos. Para ello, se debe poder modificar el nombre de la especialidad.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-038. Borrado de especialidad.&lt;/strong&gt; Como administrador, quiero borrar una especialidad. El sistema deberá alertarme de la irrevocabilidad de esta acción y pedir confirmación. En caso de confirmación, el sistema deberá borrar la especialidad y navegar al listado actualizado de especialidades con un mensaje de éxito.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-039. Listado de tipos de camilla.&lt;/strong&gt; Como administrador, quiero ver un listado de todos los tipos de camilla del sistema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-040. Creación de tipo de camilla.&lt;/strong&gt; Como administrador,** quiero crear un tipo de camilla. Para ello, se debe indicar el nombre del tipo de camilla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-041. Edición de tipo de camilla.&lt;/strong&gt; Como administrador,** quiero editar un tipo de camilla eligiéndolo a partir del listado de los tipos de camilla y llevándome a una nueva pantalla donde pueda trabajar con los datos. Para ello, se debe poder modificar el tipo de camilla.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RF-042. Borrado de tipo de camilla.&lt;/strong&gt; Como administrador, quiero borrar un tipo de camilla. El sistema deberá alertarme de la irrevocabilidad de esta acción y pedir confirmación. En caso de confirmación, el sistema deberá borrar el tipo de camilla y navegar al listado actualizado de tipos de camilla con un mensaje de éxito.&lt;/p&gt;
&lt;h3 id=&#34;requisitos-no-funcionales&#34;&gt;Requisitos no funcionales
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;RNF-001. Seguridad&lt;/strong&gt;: El sistema debe estar protegido contra el acceso no autorizado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RNF-002. Actuación&lt;/strong&gt;: El sistema debe poder manejar el número requerido de usuarios sin ninguna degradación en el rendimiento.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RNF-003. Escalabilidad&lt;/strong&gt;: El sistema debe ser capaz de escalar hacia arriba o hacia abajo según sea necesario.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RNF-004. Disponibilidad&lt;/strong&gt;: El sistema debe estar disponible cuando sea necesario.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RNF-005. Mantenimiento&lt;/strong&gt;: El sistema debe ser fácil de mantener y actualizar.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RNF-006. Portabilidad&lt;/strong&gt;: El sistema debe poder ejecutarse en diferentes plataformas con cambios mínimos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RNF-007. Fiabilidad&lt;/strong&gt;: El sistema debe ser confiable y cumplir con los requisitos del usuario.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RNF-008. Usabilidad&lt;/strong&gt;: El sistema debe ser fácil de usar y comprender.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RNF-009. Compatibilidad&lt;/strong&gt;: El sistema debe ser compatible con otros sistemas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RNF-010. Compliancia&lt;/strong&gt;: El sistema debe cumplir con todas las leyes y reglamentos aplicables.&lt;/p&gt;
&lt;h3 id=&#34;reglas-de-negocio&#34;&gt;Reglas de negocio
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;RN-001.&lt;/strong&gt; Un celador solo puede tener asignadas 10 camillas como máximo a la vez.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RN-002.&lt;/strong&gt; Un médico solo puede tener asignadas 2 salas como máximo a la vez.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RN-003&lt;/strong&gt;. El sueldo de los celadores debe estar entre los 1200 y 1400 euros.&lt;/p&gt;
&lt;h2 id=&#34;modelo-conceptual-uml&#34;&gt;Modelo conceptual UML
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;../p/cgis-laravel-stretchers/modelo-conceptual.png&#34;
	width=&#34;1231&#34;
	height=&#34;970&#34;
	srcset=&#34;../p/cgis-laravel-stretchers/modelo-conceptual_hu_3847e37399e132a3.png 480w, ../p/cgis-laravel-stretchers/modelo-conceptual_hu_3cb3cc734de24f9c.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Diagrama Conceptual&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;126&#34;
		data-flex-basis=&#34;304px&#34;
	
&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Implementación de una Arquitectura Segura Cliente-Servidor en Java utilizando TLS</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/seguridad-tls/</link>
        <pubDate>Sun, 01 Jan 2023 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/seguridad-tls/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/tls.png" alt="Featured image of post Implementación de una Arquitectura Segura Cliente-Servidor en Java utilizando TLS" /&gt;&lt;p&gt;Este proyecto fue desarrollado durante la asignatura de Seguridad, Confidencialidad y Gestión de la Identidad (SCGI) durante mi tercer año de carrera. Este proyecto se centró en el diseño y desarrollo de una arquitectura cliente-servidor segura utilizando el protocolo Transport Layer Security (TLS), con el objetivo de asegurar la confidencialidad, integridad y autenticidad de las comunicaciones.&lt;/p&gt;
&lt;h2 id=&#34;contexto-y-objetivo&#34;&gt;Contexto y Objetivo
&lt;/h2&gt;&lt;p&gt;El proyecto surgió de la necesidad de asegurar las comunicaciones en una aplicación que permitiera la transmisión de datos sensibles, como credenciales de usuario (login/password), entre clientes y un servidor central. Este tipo de aplicaciones es especialmente relevante en entornos donde la privacidad de los datos es crucial, como el sector de la salud, la banca y cualquier sistema donde los usuarios deban autenticar su identidad para acceder a servicios.&lt;/p&gt;
&lt;h2 id=&#34;configuración-de-keystores-y-truststores&#34;&gt;Configuración de KeyStores y TrustStores
&lt;/h2&gt;&lt;p&gt;Para implementar la seguridad mediante TLS, fue necesario configurar tanto el almacén de claves (KeyStore) como el almacén de certificados (TrustStore). Estos elementos permiten la autenticación mutua entre el cliente y el servidor. El KeyStore contiene las claves privadas y los certificados asociados que identifican a la entidad (cliente o servidor), mientras que el TrustStore gestiona los certificados de las entidades de confianza, permitiendo validar que las contrapartes de la comunicación son legítimas.&lt;/p&gt;
&lt;p&gt;En el desarrollo de este proyecto, se utilizó Keytool, una herramienta incluida en el JDK de Java, para crear y gestionar los certificados. El proceso requirió la configuración de las variables de entorno como JAVA_HOME y PATH, para facilitar el uso de esta herramienta desde la línea de comandos.&lt;/p&gt;
&lt;h2 id=&#34;implementación-de-sockets-tls&#34;&gt;Implementación de Sockets TLS
&lt;/h2&gt;&lt;p&gt;La comunicación entre el cliente y el servidor se realizó mediante sockets SSL (Secure Sockets Layer), sobre los cuales se integró el protocolo TLS. En ambos extremos, cliente y servidor, se configuraron sockets seguros que permitían la transmisión de datos encriptados. El servidor estaba diseñado para escuchar conexiones entrantes en un puerto específico (en este caso, el puerto 3343), autenticando a los clientes mediante la verificación de sus credenciales.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Servidor TLS: El servidor se encargaba de recibir las conexiones de los clientes y autenticar a cada usuario mediante la verificación de sus credenciales (nombre de usuario y contraseña). Además, proporcionaba respuestas basadas en el resultado de esta verificación, informando al cliente si la autenticación había sido exitosa o fallida.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cliente TLS: El cliente establecía una conexión segura con el servidor y enviaba las credenciales del usuario para su verificación. La respuesta del servidor se mostraba en una interfaz de usuario sencilla, indicando si el proceso de autenticación había sido exitoso o si hubo algún error.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;pruebas-de-comunicación-y-seguridad&#34;&gt;Pruebas de Comunicación y Seguridad
&lt;/h2&gt;&lt;p&gt;Se realizaron pruebas de comunicación tanto con seguridad como sin ella, con el fin de destacar la importancia del uso de TLS en aplicaciones que manejan información sensible. Para las pruebas sin seguridad, se implementó un socket sin cifrado que permitía observar cómo un atacante, usando herramientas como Wireshark, podía capturar y visualizar en texto claro las credenciales de usuario transmitidas.&lt;/p&gt;
&lt;p&gt;En contraste, al habilitar TLS, se observó cómo toda la información transmitida se encontraba encriptada, imposibilitando que un atacante pudiera leer los datos capturados en la red. Esto demostró la efectividad de TLS para proteger la confidencialidad y la integridad de la información.&lt;/p&gt;
&lt;h2 id=&#34;rendimiento-y-concurrencia&#34;&gt;Rendimiento y Concurrencia
&lt;/h2&gt;&lt;p&gt;Un aspecto clave de este proyecto fue la validación del rendimiento del sistema, específicamente la capacidad de manejar múltiples conexiones concurrentes. El servidor fue configurado para gestionar hasta 300 conexiones simultáneas, lo cual fue logrado utilizando hilos (threads) en Java para manejar las solicitudes en paralelo. A pesar de que las conexiones se realizaban de forma secuencial en las pruebas iniciales (una cada segundo), el sistema demostró ser robusto al procesar las peticiones de forma eficiente sin comprometer la seguridad o la estabilidad.&lt;/p&gt;
&lt;h2 id=&#34;documentación-del-proyecto&#34;&gt;Documentación del proyecto
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;../conexion_TLS.pdf&#34; &gt;BYODSEC-BRING YOUR OWN DEVICE SEGURO PARA UNA ENTIDAD HOSPITALARIA USANDO ROAD WARRIOR VPN TLS&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Computación paralela en procesadores multinúcleos con OpenMP</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/openmp/</link>
        <pubDate>Thu, 20 Oct 2022 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/openmp/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/openmp/openmp.png" alt="Featured image of post Computación paralela en procesadores multinúcleos con OpenMP" /&gt;&lt;p&gt;Este proyecto fue desarrollado durante la asignatura de Arquitectura de Sistemas y Software de Base (ASSB) durante mi segundo año de carrera. El objetivo principal era implementar un algoritmo para el cálculo del número Pi utilizando el método de MonteCarlo programando en C tanto de forma secuencial como utilizando técnicas de programación paralela para aprovechar al máximo los recursos de los procesadores multinúcleo mediante la librería OpenMP, que permite ejecutar código en múltiples hilos de manera eficiente.&lt;/p&gt;
&lt;p&gt;Las principales tareas realizadas fueron las siguientes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Desarrollo de la versión secuencial y paralela del algoritmo&lt;/strong&gt;: Implementé un programa que simula el lanzamiento de “dardos” aleatorios dentro de un cuadrado inscrito en un círculo. La relación entre los aciertos dentro del círculo y los lanzamientos totales permite calcular el valor de Pi. En la versión paralela, utilicé OpenMP para dividir el trabajo entre varios hilos, aprovechando al máximo los recursos de los procesadores multinúcleo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mediciones de tiempo y análisis de rendimiento&lt;/strong&gt;: Tras desarrollar las dos versiones del programa, realicé mediciones de tiempo para evaluar el rendimiento de la versión paralela en comparación con la secuencial. Utilicé diferentes configuraciones de hilos, desde un solo hilo hasta más del doble de los núcleos físicos del procesador, con el objetivo de analizar la aceleración y escalabilidad del algoritmo. La aceleración se calculó como la relación entre el tiempo de ejecución en un único hilo y el tiempo de ejecución con varios hilos.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Optimización y gestión de recursos compartidos&lt;/strong&gt;: Durante el desarrollo, fue necesario resolver problemas comunes de la programación paralela, como las condiciones de carrera. En este caso, utilicé directivas de OpenMP para definir variables privadas en cada hilo, evitando que varios hilos accedieran simultáneamente a las mismas variables globales y afectaran el resultado final.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Generación de gráficos de rendimiento&lt;/strong&gt;: Tras recopilar los datos de tiempos de ejecución y aceleración, generé gráficos para visualizar el rendimiento del programa a medida que aumentaba el número de hilos. Estos gráficos demostraron cómo la aplicación escalaba con un mayor número de hilos, destacando las ventajas y limitaciones de la paralelización en un entorno de memoria compartida.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Documentación del proyecto: &lt;a class=&#34;link&#34; href=&#34;../ASSB-openmp.pdf&#34; &gt;Visualizar documentación en pdf&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Proyecto de datos con Weka</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/weka/</link>
        <pubDate>Sun, 25 Sep 2022 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/weka/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/weka-project/weka.png" alt="Featured image of post Proyecto de datos con Weka" /&gt;&lt;p&gt;Este proyecto fue desarrollado como parte de la asignatura de Sistemas Inteligentes (SI) durante mi tercer año de carrera. El trabajo consistió en aplicar diferentes algoritmos de clasificación y preprocesamiento de datos para resolver un problema hipotético sobre un viaje espacial en un futuro distante. El objetivo principal era predecir, basado en ciertos atributos de los pasajeros, si estos serían transportados a una dimensión alternativa tras un accidente espacial.&lt;/p&gt;
&lt;h2 id=&#34;contexto-y-objetivo&#34;&gt;Contexto y Objetivo
&lt;/h2&gt;&lt;p&gt;El problema plantea la situación en la que una nave espacial, con miles de pasajeros a bordo, choca con una anomalía espacio-temporal, y la mitad de los pasajeros son transportados a otra dimensión. El reto del proyecto consistía en desarrollar un modelo predictivo para identificar qué pasajeros habrían sido transportados a esa dimensión alternativa, basado en atributos como la edad, el planeta de origen, si estaban en crio sueño, y otros factores.&lt;/p&gt;
&lt;h2 id=&#34;preprocesamiento-de-datos&#34;&gt;Preprocesamiento de Datos
&lt;/h2&gt;&lt;p&gt;El conjunto de datos proporcionado contenía información sobre aproximadamente 8700 pasajeros, y constaba de 14 atributos, tanto numéricos como nominales. Inicialmente, se eliminaron ciertas variables consideradas irrelevantes, como el destino del pasajero y las cantidades gastadas en servicios de lujo. A continuación, se realizaron imputaciones de valores perdidos y se binarizaron las variables categóricas utilizando One Hot Encoding.&lt;/p&gt;
&lt;p&gt;Para mejorar la eficiencia de los algoritmos de clasificación basados en distancia, como KNN, se realizó la normalización de las variables numéricas, en particular la edad de los pasajeros, con el fin de garantizar una comparación justa entre los diferentes atributos.&lt;/p&gt;
&lt;h2 id=&#34;algoritmos-implementados&#34;&gt;Algoritmos Implementados
&lt;/h2&gt;&lt;p&gt;Se probaron diversos algoritmos de clasificación, entre ellos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ZeroR&lt;/strong&gt;: Utilizado como baseline, clasificando todos los pasajeros en función del valor de la clase más frecuente.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;J48&lt;/strong&gt;: Un algoritmo de tipo árbol de decisión que mostró buenos resultados tras un proceso de poda para evitar el sobreajuste.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KNN (k-Nearest Neighbors)&lt;/strong&gt;: Este clasificador se basó en la similitud entre individuos para predecir si un pasajero sería transportado. Se probaron diferentes valores de K, siendo 9 el valor que obtuvo mejores resultados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Naive Bayes&lt;/strong&gt;: Un algoritmo que, pese a su simplicidad, proporcionó buenos resultados al asumir la independencia entre los atributos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;resultados&#34;&gt;Resultados
&lt;/h2&gt;&lt;p&gt;El mejor rendimiento se obtuvo utilizando el algoritmo KNN con un valor de K=9, logrando una precisión del 74.3%. En comparación, los otros algoritmos mostraron rendimientos ligeramente inferiores. Los experimentos realizados con validación cruzada ayudaron a evaluar de manera más confiable los modelos, asegurando que no hubiese sobreajuste.&lt;/p&gt;
&lt;p&gt;Documentación del proyecto: &lt;a class=&#34;link&#34; href=&#34;../viaje-espacial-weka.pdf&#34; &gt;Visualizar documentación en pdf&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Base de Datos para la Gestión del Equipamiento de Quirófanos</title>
        <link>https://israelbreap-portfolio.pages.dev/es/p/bd-quirofano/</link>
        <pubDate>Wed, 25 May 2022 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/p/bd-quirofano/</guid>
        <description>&lt;img src="https://israelbreap-portfolio.pages.dev/p/bd-operating-room/image-quirofano.png" alt="Featured image of post Base de Datos para la Gestión del Equipamiento de Quirófanos" /&gt;&lt;p&gt;Este proyecto fue desarrollado durante la asignatura de Bases de Datos (BD) durante mi segundo año de carrera. El objetivo principal era diseñar, modelar y desarrollar una base de datos SQL para gestionar y almacenar la información de las instalaciones y equipamientos electromédicos de un quirófano. La base de datos permitiría no solo gestionar los equipos y su mantenimiento, sino también asegurar el cumplimiento de regulaciones sanitarias, controlar el valor del equipamiento, supervisar las revisiones periódicas…&lt;/p&gt;
&lt;h2 id=&#34;descripción-del-problema&#34;&gt;Descripción del problema
&lt;/h2&gt;&lt;p&gt;Las exigencias de cumplimiento de unos determinados estándares de calidad y asepsia en un quirófano llevan aparejado una adecuada gestión y control de todos sus elementos, de su conocimiento, mantenimiento y sustitución o reparación. Intervienen diferentes perfiles en esta función y deben poder acceder a la información de forma ordenada. Se plantea, para dar respuesta a esta situación, la creación de una base de datos para gestionar toda la información relativa a los equipos, instalaciones y equipamiento electro-médico que tiene un quirófano. El
objetivo es que los tres perfiles de acceso (el ingeniero biomédico, el director de servicios generales del hospital y el ingeniero de mantenimiento) puedan acceder y conocer todos los elementos de nuestro quirófano, así como sus atributos, la empresa a la que han sido
comprados, saber cada cuanto hay que hacer una revisión de la maquinaría o conocer los valores entre los que se debe mover nuestro equipo para que desempeñe un correcto funcionamiento (temperatura, voltaje…) entre otros.&lt;/p&gt;
&lt;h2 id=&#34;solución&#34;&gt;Solución
&lt;/h2&gt;&lt;p&gt;En el caso que estamos trabajando, se plantea crear una base de datos relacional para un quirófano estándar, es decir, una base de datos general que podrá ser aplicada a cualquier tipo de quirófano, y que si es necesario podrá ser escalable para un tipo de quirófano más complejo.&lt;/p&gt;
&lt;h2 id=&#34;requisitos-generales&#34;&gt;Requisitos generales
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Almacenar los datos personales del ingeniero biomédico encargado del mantenimiento de las máquinas de la empresa a la que pertenece.&lt;/li&gt;
&lt;li&gt;Guardar toda la información del equipamiento electro-médico del que se dispone, así como información sobre las normativas de climatización y electricidad.&lt;/li&gt;
&lt;li&gt;El sistema deberá ser capaz de detectar cualquier fallo en la información tanto del equipamiento electro-médico como en la electricidad y la climatización del quirófano.&lt;/li&gt;
&lt;li&gt;El sistema deberá gestionar las revisiones de las instalaciones del quirófano y controlar su adecuado funcionamiento.&lt;/li&gt;
&lt;li&gt;El sistema permitirá consultar la información de la base de datos y filtrarla a partir de los diferentes atributos; como por ejemplo el precio, el año de adquisición y el peso del equipamiento electro-médico, atributos personales, como nombre y apellidos y número de seguridad social.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;../p/bd-operating-room/diagrama-conceptual.png&#34;
	width=&#34;2672&#34;
	height=&#34;1486&#34;
	srcset=&#34;../p/bd-operating-room/diagrama-conceptual_hu_be760684d3e9c163.png 480w, ../p/bd-operating-room/diagrama-conceptual_hu_a068379c65a3ba07.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Diagrama Conceptual&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;179&#34;
		data-flex-basis=&#34;431px&#34;
	
&gt; &lt;img src=&#34;../p/bd-operating-room/diagrama-relacional.png&#34;
	width=&#34;2428&#34;
	height=&#34;1624&#34;
	srcset=&#34;../p/bd-operating-room/diagrama-relacional_hu_4b18357635a7fc34.png 480w, ../p/bd-operating-room/diagrama-relacional_hu_973c6040a9ef6f8d.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Diagrama Relacional&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;149&#34;
		data-flex-basis=&#34;358px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;visualizar-proyecto-en-pdf&#34;&gt;Visualizar proyecto en pdf
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;../Proyecto-base-de-datos-QUIROFANO.pdf&#34; &gt;Proyecto base de datos del equipamiento de un quirófano&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Archivos</title>
        <link>https://israelbreap-portfolio.pages.dev/es/archivos/</link>
        <pubDate>Sun, 06 Mar 2022 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/archivos/</guid>
        <description></description>
        </item>
        <item>
        <title>Buscar</title>
        <link>https://israelbreap-portfolio.pages.dev/es/buscar/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://israelbreap-portfolio.pages.dev/es/buscar/</guid>
        <description></description>
        </item>
        
    </channel>
</rss>
