jueves

Prueba AJAX con Back-end

Hola, en este proyecto he desarrollado una aplicación CRUD completa utilizando JavaScript, Node.js, Express y SQL Server.

El frontend utiliza AJAX con Fetch API para comunicarse con la API sin necesidad de recargar la página.

En el backend he utilizado Node.js junto con Express para crear una API REST organizada mediante una arquitectura por capas, separando rutas, controladores, servicios y acceso a datos.

La persistencia de datos se realiza mediante SQL Server utilizando consultas parametrizadas para las operaciones CRUD.

En el frontend he utilizado HTML, CSS y JavaScript. La comunicación con el backend se realiza mediante Fetch API utilizando AJAX, permitiendo actualizar la información dinámicamente.

Flujo de la aplicación

El flujo de la aplicación funciona de la siguiente manera:

  1. El frontend realizado en JavaScript envía peticiones HTTP mediante Fetch API.
  2. Estas peticiones llegan a las rutas de Express, que redirigen la solicitud al controlador correspondiente.
  3. El controlador procesa la petición y delega la lógica al servicio.
  4. Después, el servicio utiliza el repositorio para interactuar con SQL Server y realizar las operaciones sobre la base de datos.
  5. Finalmente, la respuesta vuelve al frontend y la interfaz se actualiza dinámicamente sin recargar la página.

Funcionalidades

La aplicación permite:

  • Crear publicaciones
  • Visualizar publicaciones
  • Modificar publicaciones
  • Eliminar publicaciones

Además, durante el desarrollo he trabajado aspectos importantes como validación de datos, manejo de peticiones HTTP, comunicación cliente-servidor y depuración de errores relacionados con IDs y consultas SQL.

Video demostración

Funcionamiento de la aplicación

A continuación voy a mostrar el funcionamiento de la aplicación:

  • Crear una publicación
  • Editar una publicación
  • Eliminar una publicación

Muchas gracias y un saludo.

miércoles

🎰 Aplicación web: Tragaperras con HTML, CSS y JavaScript


📹 Video demostración


Se trata de un proyecto sencillo pero completo, donde he podido aplicar lógica de programación, manipulación del DOM y control de estado mediante crédito. Proyecto elaborado en distintas fases de desarrollo.

🎮 ¿Qué hace el juego?

  • Para realizar una tirada es necesario insertar monedas 💰
  • Sin crédito, no puedes girar la máquina, simulando el funcionamiento real de una tragaperras 🎰
  • Cada tirada consume 1 crédito
  • Si pierdes, pierdes la moneda 😢
  • Si consigues 2 símbolos iguales, recuperas tu moneda 🙂
  • Si consigues 3 símbolos iguales, ganas el premio grande 🎉 (10 monedas)

Formulario CV Html5 con Node.js y SQL Server

Formulario CV Node.js + SQL Server

🧑‍💻 Proyecto: Formulario CV con Node.js y SQL Server

Proyecto personal realizado con fines de aprendizaje, donde desarrollo un sistema completo para registrar currículums mediante formulario web y almacenamiento en base de datos.

Incluye:

  • Frontend en HTML y CSS
  • Backend con Node.js (Express)
  • Conexión a SQL Server
  • Subida de imágenes
  • Inserción de datos en base de datos

📹 Video demostración


🧑‍💻 Cómo crear el proyecto paso a paso

📌 1. Crear el frontend

El primer paso es diseñar el formulario con HTML y CSS usando tu IDE preferido (VS Code).

  • index.html
  • styles.css

📌 2. Preparar Node.js

Crear proyecto:

npm init -y

Instalar dependencias:

npm install express multer mssql

📌 3. Backend con Node.js

Se utiliza:

  • Express → servidor
  • Multer → subida de archivos
  • mssql → conexión a SQL Server

📌 4. Base de datos SQL Server

La tabla debe llamarse CV y tener los mismos campos que el formulario.

❗ Importante: si no coincide el número de campos → error SQL.

📌 5. Configuración SQL Server

  • Activar TCP/IP
  • Puerto 1433
  • Firewall abierto
  • Reiniciar servicio SQL Server

📌 6. Problemas encontrados

❌ Access (*.accdb)

Requiere ODBC + DSN de sistema → solución: migrar a SQL Server

❌ Error ELOGIN

Solucionado activando TCP/IP

❌ Node vs SSMS

SSMS usa conexión interna, Node necesita TCP/IP


🎯 Resultado final

  • ✔ Formulario funcional
  • ✔ Node.js backend
  • ✔ SQL Server conectado
  • ✔ Subida de archivos

🧠 Consejo

Antes de insertar datos en SQL:

  • Cuenta los ? en la query
  • Cuenta los valores del array
  • Deben coincidir exactamente


🚀 Cierre

Proyecto realizado con fines educativos.
Desarrollo y documentación realizados por Robert con apoyo de ChatGPT.

🧩 Reparando Windows 11 Insider Preview con una ISO oficial

🛑 El problema inicial: error en la actualización

Todo comenzó con un error persistente al intentar instalar una actualización acumulativa en mi sistema Windows 11 Insider Preview (canal Dev). Intenté instalar la actualización acumulativa:

Cumulative Update for Windows 11 Insider Preview (10.0.26200.5670) (KB5060831)

pero me apareció el siguiente error:
Error de instalación 0x80242016

Este error impidió que Windows Update pudiera completar la instalación correctamente, bloqueando el sistema para futuras actualizaciones. Por ello, tras varios intentos y limpieza de los componentes de actualización, decidí realizar una reparación completa del sistema con una ISO oficial para corregir este fallo persistente.

Pasaron varias semanas sin actualizaciones y con el mismo error en bucles: error de instalación 0x80242016. Probé primero con un clásico script de limpieza de componentes de Windows Update:

net stop wuauserv
net stop bits
net stop cryptsvc
net stop msiserver

del /f /s /q %windir%\SoftwareDistribution\*
del /f /s /q %windir%\System32\catroot2\*

net start wuauserv
net start bits
net start cryptsvc
net start msiserver
  

¿Qué hace este script?

  • Detiene los servicios relacionados con Windows Update: wuauserv, bits, cryptsvc y msiserver.
  • Elimina el contenido de dos carpetas clave donde Windows almacena datos temporales de actualizaciones: SoftwareDistribution y catroot2.
  • Reinicia los servicios detenidos, dejando el sistema limpio y listo para intentar nuevamente la instalación de actualizaciones.

Resultado de esta fase:

A pesar de que el script se ejecutó correctamente y los servicios se reiniciaron sin errores, el problema persistía. Las actualizaciones seguían sin poder instalarse, y era evidente que el conflicto requería una solución más robusta.

💿 Preparando la reparación in-place: Descarga de la ISO oficial

Ante la imposibilidad de instalar el parche mediante Windows Update, decidí realizar una reparación in-place. Esta técnica permite reinstalar Windows sin perder archivos personales ni aplicaciones, conservando la mayoría de configuraciones.

Para ello, necesitaba una imagen ISO de la misma versión que ya tenía instalada, perteneciente al canal Dev del programa Windows Insider.

🔽 Descarga de la ISO Insider:

https://www.microsoft.com/software-download/windowsinsiderpreviewiso

  • Versión: Windows 11 Insider Preview (Dev Channel)
  • Idioma: español (España)
  • Edición: Windows 11 Pro

El archivo ISO descargado correspondía a la siguiente versión:
26200.5670.250619-1641.GE_PRERELEASE_IM_CLIENTPRO_OEMRET_X64FRE_ES-ES.iso

Una vez descargada la imagen, pasé a montarla para ejecutar la instalación desde dentro del propio sistema operativo.

📂 Montaje de la ISO y ejecución

Al principio utilicé la aplicación UltraISO para montar la imagen, pero obtuve un error indicando que no se encontraba setup.exe. Finalmente, abrí la ISO directamente con el Explorador de archivos de Windows, hice doble clic en setup.exe, ¡y funcionó!

🔧 🛠️ Iniciando la reparación in-place desde la ISO

Una vez montada la imagen ISO con el Explorador de archivos de Windows, el proceso fue bastante directo. Estos son los pasos básicos que seguí para reparar el sistema sin perder datos:

  1. Doble clic en setup.exe para abrir el asistente de instalación.
  2. Comprobación rápida de compatibilidad del equipo.
  3. Aceptación de términos de licencia.
  4. Búsqueda de actualizaciones necesarias antes de proceder.
  5. Confirmación de conservar archivos personales y aplicaciones.

🔄 Instalación y reinicio

El proceso fue automático y tomó su tiempo. Al reiniciar, el sistema ya estaba en la misma versión del canal Dev y Windows Update funcionaba correctamente.

Se instalaron automáticamente:

  • KB5060831 (Update acumulativa Insider)
  • KB5056582 (.NET Framework 3.5 y 4.8.1)
  • KB2267602 (Microsoft Defender)
Captura de pantalla reparación Windows 11

✅ Resultado final

El sistema quedó estable, actualizado y sin errores. Pude comprobar que:

  • Ya no había fallos al buscar actualizaciones.
  • El equipo seguía dentro del programa Insider en el canal Dev.
  • Todo el software y configuraciones permanecieron intactos.
Resultado actualización Windows 11 reparado

📝 Conclusión

A veces, la mejor solución es reinstalar sin formatear, especialmente cuando los errores son profundos pero el sistema aún arranca. En mi caso, aunque el sistema parecía estar relativamente estable, no podía instalar actualizaciones importantes, como por ejemplo las definiciones del antivirus, que ya estaban obsoletas. Gracias a la herramienta oficial de Microsoft y la ISO adecuada, no tuve que perder nada.

💬 Si te encuentras en una situación similar, no dudes en seguir este método. Siempre asegúrate de tener una ISO actualizada y paciencia durante el proceso.

jueves

🟢 DEMOSTRACIÓN: Monitorización de sistemas con InfluxDB + Telegraf (Flux)

🧪 ENTORNO DE PRUEBAS:

  • Entorno virtualizado con VMware Workstation 17.5.2
  • Dos máquinas virtuales: Linux y Windows 10

🔧 ¿QUÉ INSTALAMOS?

  • InfluxDB (versión 2.x, con soporte para Flux)
  • Telegraf como agente para recopilar métricas

🎯 OBJETIVO:

  • Monitorizar métricas de dos equipos: Linux (local) y Windows 10 (remoto)
  • Visualizarlas en InfluxDB y Grafana

📌 ¿Qué es Telegraf y para qué sirve?

  • Agente ligero instalado en el equipo que quieres monitorizar
  • Recopila métricas del sistema: CPU, memoria, disco, red, etc.
  • Configurado con archivo telegraf.conf
  • Funciona en segundo plano enviando datos a InfluxDB
  • Permite análisis y visualización con InfluxDB o Grafana

📌 ¿Qué es InfluxDB?

  • Base de datos especializada en series temporales
  • Recibe y almacena métricas de Telegraf
  • Permite visualizar métricas con gráficos y paneles

=============================
📊 ¿QUÉ ES UNA BASE DE DATOS DE SERIES TEMPORALES?
=============================

➡️ Diseñada para almacenar datos con marca temporal.

Ejemplos:

  • Uso de CPU o memoria
  • Temperatura de sensores
  • Eventos del sistema

⚡ Ventajas:

  • Almacenamiento rápido de grandes volúmenes
  • Análisis temporal de datos
  • Detección de patrones o anomalías

🖥️ EQUIPO LOCAL: LINUX

  • Telegraf desde repositorio oficial
  • Plugins: cpu, mem, disk, net
  • Config: /etc/telegraf/telegraf.conf
  • Salida: InfluxDB local

🪟 EQUIPO REMOTO: WINDOWS 10

  • Telegraf como servicio
  • Config: C:\Program Files\Telegraf\telegraf.conf
  • Plugins: mismos que en Linux
  • Salida: IP del servidor InfluxDB

📦 INSTALACIÓN DE INFLUXDB EN UBUNTU 22.04

  1. Añadir la clave GPG (todo en una sola linea):
    wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key \  
    | sudo gpg --dearmor -o /usr/share/keyrings/influxdata-archive_compat.gpg
  2. Añadir el repositorio (todo en una sola linea):
    echo "deb [signed-by=/usr/share/keyrings/influxdata-archive_compat.gpg] \
    https://repos.influxdata.com/ubuntu jammy stable" \
    | sudo tee /etc/apt/sources.list.d/influxdata.list
  3. Instalar:
    sudo apt update
    sudo apt install influxdb2
  4. Habilitar e iniciar:
    sudo systemctl enable influxdb
    sudo systemctl start influxdb

📍 Acceso: http://localhost:8086

🚨 Conflicto con Apache:

  • Modificar puertos de InfluxDB o Apache
  • Ver puertos ocupados:
    sudo netstat -tuln | grep :80
    sudo ss -tuln | grep :80

📡 INSTALACIÓN DE TELEGRAF EN UBUNTU 22.04

⚠️ Telegraf se instala por separado.

  1. Clave GPG (todo en una sola linea):
    wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | 
          sudo gpg --dearmor -o /usr/share/keyrings/influxdata-archive_compat.gpg
  2. Repositorio (todo en una sola linea):
    echo "deb [signed-by=/usr/share/keyrings/influxdata-archive_compat.gpg] 
          https://repos.influxdata.com/ubuntu jammy stable" | 
          sudo tee /etc/apt/sources.list.d/influxdata.list
  3. Instalación:
    sudo apt update
    sudo apt install telegraf
  4. Habilitar e iniciar:
    sudo systemctl enable telegraf
    sudo systemctl start telegraf

📂 Config: /etc/telegraf/telegraf.conf


🔍 CONSULTAS EN INFLUXDB

📚 INFLUXDB Y SUS LENGUAJES DE CONSULTA

  • ✅ InfluxDB 1.x
    • Lenguaje principal: InfluxQL
    • Sintaxis muy parecida a SQL
    • Ejemplo:
    SELECT mean("value") FROM "cpu_load"
    WHERE time > now() - 1h
    GROUP BY time(10m)
        
  • ✅ InfluxDB 2.x
    • Lenguaje principal: Flux
    • Más potente y flexible que InfluxQL
    • Permite transformaciones, joins, condicionales, múltiples fuentes, etc.
    • Ejemplo:
    from(bucket: "mi_bucket")
      |> range(start: -1h)
      |> filter(fn: (r) => r._measurement == "cpu_load")
      |> mean()
        
  • ✅ InfluxDB 3.x
    • Nuevo motor de almacenamiento (Apache Arrow + DataFusion)
    • Lenguaje de consulta más moderno: SQL nativo
    • Sintaxis basada en SQL estándar
    • Alta compatibilidad con herramientas de análisis modernas
    • Ejemplo:
    SELECT MEAN(value)
    FROM cpu_load
    WHERE time > NOW() - INTERVAL '1 hour'
    GROUP BY TIME_BUCKET('10 minutes', time)
        

📌 NOTA:
- Flux no está disponible en InfluxDB 3.x.
- InfluxQL clásico tampoco es compatible directamente en la versión 3.x.
- InfluxDB 3.x está más orientado a análisis avanzado y alto rendimiento en la nube.


📊 VISUALIZACIÓN EN GRAFANA

  • Importar datasource InfluxDB
  • Crear dashboards personalizados
  • Variables para filtrar por sistema operativo o hostname

🎯 CONCLUSIÓN:

  • Telegraf es un agente que recopila métricas del sistema y aplicaciones según la configuración definida.
  • InfluxDB es una base de datos especializada en series temporales donde se almacenan estas métricas.
  • Las métricas recopiladas pueden visualizarse fácilmente en herramientas como InfluxDB o Grafana, permitiendo la creación de dashboards personalizados para un análisis efectivo.

sábado

Guía de instalación de Graphite en Ubuntu 22.04 (mediante APT)

📌 Guía de instalación de Graphite en Ubuntu 22.04 (mediante APT)

1️⃣ Paso 1: Actualizar el sistema

🖥️ Actualizar los repositorios y el sistema:

sudo apt-get update -y
sudo apt-get upgrade -y

2️⃣ Paso 2: Instalar Apache y mod_wsgi

⚙️ Instalar Apache y mod_wsgi:

sudo apt-get install apache2 libapache2-mod-wsgi-py3 -y

3️⃣ Paso 3: Instalar Graphite y Carbon

💻 Instalar Graphite y Carbon:

sudo apt-get install graphite-web graphite-carbon -y

4️⃣ Paso 4: Configurar Carbon

🔧 Habilitar Carbon:

sudo nano /etc/default/graphite-carbon
# Cambiar a:
CARBON_CACHE_ENABLED=true

🔧 Reiniciar servicio:

sudo systemctl start carbon-cache
sudo systemctl status carbon-cache

5️⃣ Paso 5: Rutas de interés

📂 Rutas de archivos importantes:

  • Código fuente: /usr/lib/python3/dist-packages/graphite/
  • Archivo de configuración: /etc/graphite/local_settings.py
  • Archivos web: /usr/share/graphite-web/
  • Base de datos: PostgreSQL instalada manualmente

6️⃣ Paso 6: Instalar Python y dependencias

🔧 Instalar:

sudo apt install python3-dev python3-pip libcairo2-dev libffi-dev build-essential -y
sudo apt install python3-psycopg2 -y

7️⃣ Paso 7: Instalar PostgreSQL

📦 Instalar y configurar base de datos:

sudo apt-get install postgresql postgresql-contrib libpq-dev -y
sudo -u postgres psql
CREATE DATABASE graphite;
CREATE USER graphite WITH PASSWORD 'tu contraseña';
GRANT ALL PRIVILEGES ON DATABASE graphite TO graphite;
\q  (para salir del entorno sql)

8️⃣ Paso 8: Configurar local_settings.py

📄 Modificar configuración:

sudo nano /opt/graphite/webapp/graphite/local_settings.py

✏️ Cambios importantes:

  • 🔐 SECRET_KEY generado con:
python3 -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
  • 📌 ALLOWED_HOSTS = ['*']
  • 🌍 TIME_ZONE = 'Europe/Madrid'
  • 🔓 USE_REMOTE_USER_AUTHENTICATION = True
  • 🛠️ Configuración de base de datos (PostgreSQL):
DATABASES = {
    'default': {
        'NAME': 'graphite',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'graphite',
        'PASSWORD': 'tu_contraseña',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

✅ Guarda y cierra el archivo con Ctrl + O, Enter y Ctrl + X.

9️⃣ Paso 9: Migraciones Django

⚙️ Ejecutar migraciones:

sudo graphite-manage migrate auth
sudo graphite-manage migrate
sudo graphite-manage createsuperuser

🔟 Paso 10: Crear enlace simbólico

sudo ln -s /etc/graphite/local_settings.py /usr/lib/python3/dist-packages/graphite/local_settings.py

1️⃣1️⃣ Paso 11: Configurar Apache

sudo a2dissite 000-default
sudo cp /usr/share/graphite-web/apache2-graphite.conf /etc/apache2/sites-available/
sudo a2ensite apache2-graphite

1️⃣2️⃣ Paso 12: Enlazar recursos estáticos Django

sudo ln -s /usr/lib/python3/dist-packages/django/contrib/admin/static/admin/ 
/usr/share/graphite-web/static/admin

1️⃣3️⃣ Paso 13: Permisos y reinicio

🔒 Ajustar permisos y reiniciar:

sudo useradd -r -s /usr/sbin/nologin graphite
sudo chown _graphite:_graphite /var/log/graphite/*.log
sudo chown -R _graphite:_graphite /var/lib/graphite/whisper
sudo chmod -R 775 /var/lib/graphite/whisper
sudo systemctl restart carbon-cache
sudo systemctl reload apache2

1️⃣4️⃣ Acceso a la interfaz web de Graphite

🌐 Accede a:

http://[tu_ip_local]:[puerto]

🔵 Nota: El puerto se configura en /etc/apache2/sites-available/apache2-graphite.conf. Si no lo cambiaste, es el 80. En mi caso, configuré el puerto 8888:

http://localhost:8888

🎉 ¡Fin de la instalación!

lunes

Monitorización bases de datos con Prometheus y Grafana

Monitorización con Prometheus y Grafana

Monitorización con Prometheus y Grafana

En este video, mostraré cómo he configurado Prometheus y Grafana para monitorizar bases de datos: MariaDB en Fedora 40 y SQL Server en Windows 10. Mi configuración de monitorización se centra en dos componentes:

  1. Prometheus: para recopilar métricas de las bases de datos. Documentación oficial
  2. Grafana: para visualizar esas métricas de manera efectiva. Página oficial

Tengo instalado y configurado Prometheus y Grafana en Fedora 40 para visualizar el rendimiento de las bases de datos MariaDB y SQL Server.

Lista de Plugins Instalados:

  • Node Exporter:
    • Utilizado para monitorear el rendimiento general del sistema (CPU, memoria, red, disco, etc.).
  • Mysqld_exporter:
    • Utilizado para recopilar métricas relacionadas con MariaDB y MySQL. Este exportador recoge información sobre el estado de las consultas, la utilización de la CPU y la memoria, entre otros detalles.
  • SQL Server Exporter (mssql_exporter):
    • Utilizado para recopilar métricas de rendimiento y actividad en SQL Server.
  • Windows Exporter (Para Windows):
    • Recoge métricas del sistema operativo Windows (uso de CPU, memoria, disco, red, etc.).

Con esta configuración, puedes:

  • Obtener métricas clave sobre el rendimiento de MariaDB en Fedora y SQL Server en Windows 10.
  • Verificar la salud y el estado de las bases de datos en tiempo real desde el panel de Grafana.
  • Optimizar el rendimiento de las bases de datos al tener visibilidad sobre el uso de recursos y la latencia de las consultas.