Novedades Red.es e Incibe

Novedades Red.es e Incibe

Las últimas novedades de Red.es e INCIBE en diciembre de 2025 se centran en impulsar la innovación digital y reforzar la ciberseguridad nacional.

Red.es – Principales novedades

  • Convocatoria RedIA Salud (noviembre 2025): Red.es ha lanzado un programa dotado con 50 millones de euros para proyectos de inteligencia artificial aplicada al ámbito sanitario. El objetivo es mejorar diagnósticos, tratamientos y gestión hospitalaria mediante IA.
  • Internacionalización de startups: 34 startups y organismos españoles participaron en el pabellón de España en SLUSH Helsinki 2025, mostrando innovación tecnológica en uno de los mayores eventos europeos de emprendimiento.
  • Expansión internacional: cinco startups españolas se preparan para conquistar Canadá con soluciones tecnológicas innovadoras, apoyadas por Red.es.
  • Smart Cities: Red.es continúa promoviendo proyectos de ciudades inteligentes, aplicando innovación y tecnología al servicio del ciudadano.

INCIBE – Principales novedades

  • Criptografía cuántica como prioridad nacional: Félix Barrio, director de INCIBE, ha señalado que la criptografía cuántica es una de las tres prioridades nacionales en seguridad y defensa. Se advierte que los sistemas robustos actuales podrían ser vulnerables en el futuro.
  • Informe sobre ciberseguridad 2025: INCIBE ha publicado un análisis sobre el estado de la ciberseguridad y la ciberinteligencia en España en 2025, destacando tendencias, vulnerabilidades y retos emergentes.
  • Demanda de profesionales: España necesita alrededor de 99.600 especialistas en ciberseguridad para cubrir la creciente demanda del sector.
  • Reestructuración institucional: INCIBE se ha integrado en la Secretaría de Estado de Telecomunicaciones, Infraestructuras Digitales y Seguridad Digital, reforzando su papel en la estrategia nacional de transformación digital.

Aquí tienes las convocatorias abiertas de Red.es e INCIBE a diciembre de 2025:

Convocatorias Red.es

  • C006/25-SP – Ayudas IA en Salud
    • Proyectos de desarrollo experimental para impulsar la adopción de la inteligencia artificial en el ámbito sanitario.
    • Plazo: hasta el 5 de enero de 2026.
  • C055/25-SI – Kit Espacios de Datos
    • Ayudas para la transformación digital de sectores estratégicos fomentando la incorporación a espacios de datos.
    • Plazo: hasta el 31 de marzo de 2026.
  • Agentes del Cambio – Kit Consulting
    • Adhesión de asesores digitales para apoyar a pymes en su proceso de digitalización.
  • Kit Digital – Agentes Digitalizadores
    • Adhesión de agentes para la digitalización de pequeñas empresas y autónomos.

Convocatorias INCIBE

  • Empleo público INCIBE 2025
    • Convocatoria de selección de personal técnico sénior para el Laboratorio de Tecnologías.
    • Publicada el 31 de octubre de 2025, con alegaciones hasta el 1 de diciembre de 2025.
  • Proyecto INCIBE‑UNED (2025)
    • Concurso de méritos para cubrir 100 plazas de dinamizadores-docentes en formación de ciberseguridad.
    • Enmarcado en el Plan de Recuperación, Transformación y Resiliencia financiado por la UE.

Página oficial: Empleo INCIBE

Red.es está impulsando proyectos de IA en salud y la integración en espacios de datos, además de programas de digitalización para pymes.

INCIBE está reforzando su plantilla con perfiles técnicos y promoviendo la formación en ciberseguridad a gran escala.

Conclusiones

Red.es está apostando fuerte por la IA aplicada a la salud y la internacionalización de startups.

INCIBE está marcando la agenda de la ciberseguridad nacional, con foco en criptografía cuántica, formación de talento y nuevas estructuras de coordinación.

Solucionar Ingresos Bajos en AdSense

Solucionar Ingresos Bajos en AdSense

La solución a ingresos bajos en AdSense pasa por dos frentes: aumentar el tráfico cualificado y optimizar la colocación y formato de los anuncios. No basta con tener visitas; necesitas mejorar el valor del clic (CPC) y la visibilidad de los anuncios para que cada impresión rinda más.

Para colocar los anuncios de AdSense tú mismo en tu web (sin depender solo de los anuncios automáticos de Google), existen varias herramientas y plugins que te dan control total sobre dónde y cómo aparecen:

Programas y plugins para gestionar anuncios

WordPress

  • Ad Inserter: uno de los más usados. Permite insertar bloques de AdSense en cualquier parte (cabecera, sidebar, dentro de posts, después de párrafos, etc.) con reglas condicionales (por rol de usuario, dispositivo, categoría…).
  • Advanced Ads: muy completo, con opciones de rotación, pruebas A/B y segmentación.
  • WP Quads: heredero del clásico Quick AdSense, sencillo y rápido para colocar anuncios en entradas y páginas.

CMS o sitios sin WordPress

  • Google Ad Manager (antes DFP): plataforma oficial de Google para gestionar inventario de anuncios. Es más complejo, pero te da control absoluto sobre posiciones y campañas.
  • Insertar manualmente el código: copiando el bloque <ins class="adsbygoogle"> en tus plantillas (header.phpsidebar.phpsingle.php) o en módulos de tu constructor (Divi, Elementor).

Herramientas externas

  • AdRotate: plugin que permite gestionar no solo AdSense, sino también banners propios o de afiliados.
  • OIO Publisher (aunque menos actualizado): para vender espacios publicitarios directamente y combinar con AdSense.

Ventajas de usar un programa/plugin

  • Controlas exactamente dónde aparece cada anuncio.
  • Evitas repeticiones en la misma página.
  • Puedes ocultar anuncios a ciertos roles (como ya haces con “Profesional”).
  • Facilita pruebas: cambiar posiciones y ver qué da más ingresos (CTR y RPM).

Si decides usar un programa o plugin para colocar los anuncios manualmente (como Ad Inserter o Advanced Ads), lo recomendable es desactivar los anuncios automáticos de AdSense.

Diferencia entre ambos modos

  • Anuncios automáticos (Auto Ads)
    • Google decide dónde y cuántos anuncios mostrar.
    • Ventaja: cero configuración, rápido de activar.
    • Desventaja: poca personalización, riesgo de repetición o saturación en la página.
  • Anuncios manuales (bloques insertados por ti)
    • Tú eliges la posición exacta (ej. después del 2º párrafo, en sidebar, al final del post).
    • Puedes aplicar reglas condicionales (por rol de usuario, categoría, dispositivo).
    • Evitas duplicados y controlas la experiencia del visitante.

Qué hacer en tu caso

  1. Desactiva Auto Ads desde tu panel de AdSense → Configuración de anuncios → Apagar “Anuncios automáticos”.
  2. Inserta manualmente los bloques con un plugin (ej. Ad Inserter) o directamente en tu plantilla.
  3. Define reglas claras:
    • Mostrar solo a visitantes (no a “Profesional”).
    • Limitar a 2–3 anuncios por página.
    • Usar formatos rentables (in-article, anchor, matched content).

En resumen: sí, al usar un plugin para colocar anuncios tú mismo, lo ideal es desactivar los automáticos para evitar que Google meta anuncios extra en lugares no deseados.

Te muestro un paso a paso claro para que configures anuncios manuales en WordPress con Ad Inserter y desactives los automáticos de AdSense:

Desactivar anuncios automáticos en AdSense

  1. Entra en tu cuenta de Google AdSense.
  2. Ve a Anuncios → Resumen → Configuración de anuncios automáticos.
  3. Desactiva el interruptor de Auto Ads.
    • Esto evita que Google coloque anuncios adicionales sin tu control.

Instalar Ad Inserter en WordPress

  1. En tu panel de WordPress → Plugins → Añadir nuevo.
  2. Busca Ad Inserter e instálalo.
  3. Actívalo.

Insertar un bloque de AdSense

  1. Copia el código de anuncio desde tu cuenta de AdSense (ejemplo: <ins class="adsbygoogle" ...>).
  2. En WordPress → Ad Inserter → Bloque 1, pega el código.
  3. Configura dónde quieres que aparezca:
    • Before paragraph 2 → justo después del segundo párrafo.
    • Sidebar → en la barra lateral.
    • After content → al final del artículo.

Reglas condicionales

  • En Ad Inserter puedes definir:
    • Mostrar solo a visitantes (ocultar a roles como “Profesional”).
    • Diferenciar entre móvil y escritorio.
    • Limitar el número de anuncios por página.

Ejemplo visual de colocación recomendada

  • Cabecera (Header) → 1 anuncio tipo banner.
  • Dentro del artículo → 1 anuncio in-article después del 2º párrafo.
  • Sidebar → 1 anuncio vertical.
  • Final del artículo → 1 anuncio matched content o display.

Con esto tendrás 4 posiciones estratégicas, sin saturar al usuario y maximizando CTR y RPM.

MÁS INFORMACIÓN: AdSense

Comandos básicos de MariaDB en Debian

Comandos básicos de MariaDB en Debian

LAS CONEXIONES SIMULTÁNEAS PUEDE CAUSAR UNA CAÍDA EN MariaDB, y perder la conexión del sitio web de WordPress con la Base de Datos, causando un ERROR DE CONEXIÓN CON LA BASE DE DATOS.

Arrancar, detener y reiniciar

Arrancar MariaDB sudo systemctl start mariadb

Detener MariaDB sudo systemctl stop mariadb

Reiniciar MariaDB sudo systemctl restart mariadb

Estado del servicio

  • Ver estado (sin quedarse dentro del visor)bashsudo systemctl status mariadb --no-pager
  • Ver si arranca al inicio del sistemabashsudo systemctl is-enabled mariadb

Logs y errores

  • Ver últimos registros de MariaDBbashjournalctl -u mariadb -n 50 --no-pager
  • Ver logs en tiempo realbashjournalctl -u mariadb -f

Comprobación de conexión

  • Entrar al cliente MySQL/MariaDBbashmysql -u root -p
  • Probar conexión remotabashmysql -u usuario -p -h IP_DEL_VPS

Consejo: Si alguna vez te quedas “atrapado” viendo el estado con systemctl status, recuerda que basta con pulsar q para salir y volver al prompt.

Aquí tienes una mini‑guía de optimización de MariaDB para un VPS con 2 GB de RAM. Con estos ajustes tu servidor debería mantenerse estable y evitar que el sistema lo mate por falta de memoria.

⚙️ Configuración recomendada en /etc/mysql/mariadb.conf.d/50-server.cnf

Dentro del bloque [mysqld] añade o ajusta estas líneas:

ini

[mysqld]
# Memoria principal para InnoDB (ajustada a 256 MB para 2 GB de RAM)
innodb_buffer_pool_size = 256M

# Número máximo de conexiones simultáneas
max_connections = 100

# Tamaño máximo de tablas temporales en memoria
tmp_table_size = 64M
max_heap_table_size = 64M

# Caché de consultas (puede ayudar en sitios con muchas lecturas repetidas)
query_cache_size = 32M
query_cache_type = 1

# Limitar el tamaño del log binario si no usas replicación
expire_logs_days = 7
max_binlog_size = 100M

# Evitar que MariaDB consuma demasiada RAM en operaciones grandes
join_buffer_size = 2M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M

Pasos para aplicar

Edita el archivo: sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Añade el bloque [mysqld] con los parámetros anteriores.

Guarda con Ctrl+O, confirma con Enter y sal con Ctrl+X.

Reinicia MariaDB: sudo systemctl restart mariadb sudo systemctl status mariadb --no-pager

Consejos adicionales

  • Activa swap si tu VPS no la tiene, para evitar OOM‑kill:bashsudo fallocate -l 1G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
  • Monitoriza consumo con:bashhtop
  • Ajusta valores si notas que MariaDB sigue consumiendo demasiada RAM.

script automático pensado para tu VPS Debian con 2 GB de RAM. Este script ajusta los parámetros de MariaDB y activa un archivo de swap de 1 GB para evitar que el sistema vuelva a matar el proceso por falta de memoria.

Aquí tienes un script avanzado que no solo optimiza MariaDB y activa swap, sino que además monitoriza el servicioy lo reinicia automáticamente si detecta un fallo por OOM‑kill (falta de memoria).

Script avanzado: Optimización + Monitorización MariaDB

Guárdalo como mariadb_monitor.sh:

bash

#!/bin/bash
# Script avanzado para optimizar y monitorizar MariaDB en VPS Debian (2 GB RAM)

CONF="/etc/mysql/mariadb.conf.d/50-server.cnf"

echo "🔧 Ajustando configuración de MariaDB..."

# Añadir bloque [mysqld] si no existe
if ! grep -q "

\[mysqld\]

" $CONF; then
    echo "[mysqld]" | sudo tee -a $CONF
fi

# Añadir parámetros optimizados
sudo tee -a $CONF > /dev/null <<EOL
innodb_buffer_pool_size = 256M
max_connections = 100
tmp_table_size = 64M
max_heap_table_size = 64M
query_cache_size = 32M
query_cache_type = 1
join_buffer_size = 2M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 4M
EOL

echo "✅ Configuración añadida a $CONF"

# Reiniciar MariaDB
sudo systemctl restart mariadb
echo "✅ MariaDB reiniciado"

# Crear swap de 1 GB si no existe
if ! grep -q "/swapfile" /etc/fstab; then
    echo "🔧 Creando archivo de swap de 1 GB..."
    sudo fallocate -l 1G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
    echo "✅ Swap activado y configurado en /etc/fstab"
else
    echo "ℹ️ Swap ya está configurado en el sistema"
fi

# Monitorización: comprobar si MariaDB está activo
echo "🔍 Comprobando estado de MariaDB..."
if ! systemctl is-active --quiet mariadb; then
    echo "⚠️ MariaDB no está activo. Intentando reinicio..."
    sudo systemctl restart mariadb
    if systemctl is-active --quiet mariadb; then
        echo "✅ MariaDB reiniciado correctamente tras fallo."
    else
        echo "❌ Error: MariaDB no pudo reiniciarse. Revisa logs con: journalctl -u mariadb -xe"
    fi
else
    echo "✅ MariaDB está activo y funcionando."
fi

echo "🎉 Script completado. MariaDB optimizado y monitorizado."

Cómo usarlo

Crea el archivo: nano mariadb_monitor.sh

Pega el contenido.

Guarda con Ctrl+O, confirma con Enter, y sal con Ctrl+X.

Dale permisos de ejecución: chmod +x mariadb_monitor.sh

Ejecútalo:./mariadb_monitor.sh

Soluciones prácticas

1. Ajustar max_connections

  • Con 2 GB de RAM puedes subirlo a 100 (como ya configuramos).
  • No conviene subirlo demasiado, porque cada conexión consume memoria.

2. Usar un pool de conexiones

  • Instala y configura un pool de conexiones (ej. ProxySQL o MariaDB MaxScale).
  • Esto permite que las aplicaciones web reutilicen conexiones en lugar de abrir nuevas cada vez.

3. Optimizar consultas

  • Revisa que las consultas SQL sean rápidas y usen índices.
  • Evita consultas pesadas que bloqueen la base de datos.

4. Cachear resultados

  • Usa memcached o Redis para cachear datos frecuentes y reducir la carga sobre MariaDB.

5. Escalar infraestructura

  • Si el tráfico sigue creciendo, considera:
    • Migrar a un VPS con más RAM.
    • Usar un balanceador de carga con varias instancias de base de datos.

Web Recomendada

Comandos SSH

Qué es un certificado SSL

Qué es un certificado SSL

Un certificado SSL sirve para cifrar la comunicación entre el navegador y el servidor, garantizando privacidad y autenticidad del sitio web. Además, muchos certificados incluyen una garantía monetaria ofrecida por la Autoridad de Certificación (CA), que puede cubrir al usuario final en caso de que el certificado falle y cause pérdidas económicas.

🔐 ¿Qué es un certificado SSL?

  • Es un certificado digital que autentica la identidad de un sitio web y habilita una conexión segura mediante HTTPS.
  • El protocolo SSL/TLS cifra los datos transmitidos (contraseñas, tarjetas de crédito, información personal), evitando que terceros los intercepten o manipulen.
  • El candado en la barra de direcciones indica que la conexión está protegida.

¿Existe un seguro monetario?

Sí, pero con matices:

  • Los certificados SSL incluyen una garantía que varía según el tipo y el proveedor.
  • Esta garantía es un compromiso de la CA (Autoridad de Certificación) de indemnizar económicamente al usuario final si el certificado falla por negligencia de la CA y provoca pérdidas financieras (por ejemplo, fraude en transacciones online).
  • Los montos de cobertura pueden ir desde 10.000 USD hasta 1.5 millones USD, dependiendo del nivel del certificado (DV, OV, EV).
  • Importante: esta garantía no protege al dueño del sitio web, sino al cliente que confía en el certificado. Es decir, si un visitante sufre un daño económico porque el certificado fue emitido de forma incorrecta, puede reclamar la indemnización.

Puntos clave

  • Propósito principal: seguridad y confianza en las transacciones online.
  • Seguro monetario: sí existe, pero solo en casos de fallo atribuible a la CA.
  • No cubre: errores del administrador del sitio, hackeos por mala configuración, ni fraudes ajenos al certificado.
  • Valor añadido: además de cifrado, el SSL mejora el SEO y la reputación del sitio.

El certificado SSL protege la comunicación y aporta confianza. La garantía monetaria es un respaldo adicional, pero solo aplica si la Autoridad de Certificación comete un error que cause pérdidas financieras.

Detalles del certificado EV SSL

  • Proveedor: Sectigo (una de las principales Autoridades de Certificación).
  • Precio: 126,95 € / año.
  • Tipo: Validación extendida (EV).
  • Proceso de validación:
    • Verificación exhaustiva de la identidad de la empresa solicitante.
    • Revisión de datos legales y de contacto.
    • Garantiza que el sitio web pertenece realmente a la entidad indicada.
  • Cobertura:
    • Cifrado fuerte de las comunicaciones (HTTPS).
    • Mayor confianza para clientes en transacciones online.
    • Incluye garantía monetaria para usuarios finales en caso de fallo atribuible a la CA (el importe depende del certificado, en Sectigo EV SSL suele rondar hasta 1 millón USD).

Diferencias frente a otros certificados

  • DV (Domain Validation): solo valida el dominio, más barato (~10–30 €/año).
  • OV (Organization Validation): valida la empresa, precio intermedio (~50–100 €/año).
  • EV (Extended Validation): máxima validación y confianza, precio más alto (~126,95 € ).

✅ Conclusión: Si buscas máxima credibilidad para un sitio corporativo o de comercio electrónico, algún proveedor sí ofrece el EV SSL de Sectigo a 126,95 €/año, con validación extendida y garantía monetaria para clientes.

La diferencia principal entre un certificado EV SSL y uno gratuito como Let’s Encrypt está en el nivel de validación, la garantía monetaria y la confianza que transmiten. Let’s Encrypt ofrece cifrado básico, mientras que el EV SSL proporciona validación empresarial completa y respaldo económico.

🔐 Comparativa: EV SSL vs Let’s Encrypt

CaracterísticaEV SSL (Extended Validation)Let’s Encrypt (Gratuito)
Precio100–300 USD/año (DonDominio: 126,95 €/año)Gratis
ValidaciónValidación extendida de empresa (documental)Validación de dominio (automática)
Confianza visualMuestra nombre legal de la empresa en el certificadoSolo muestra el candado HTTPS
Garantía monetariaSí (hasta 1 millón USD para usuarios finales)No incluye garantía económica
Soporte técnicoProfesional, con SLA y asistencia personalizadaLimitado o comunitario
Renovación automáticaManual o asistida por proveedorSí, cada 90 días
Uso recomendadoComercio electrónico, banca, institucionesBlogs, sitios personales, proyectos básicos

✅ ¿Cuál elegir?

  • Let’s Encrypt es ideal si necesitas cifrado básico, sin coste, y no manejas datos sensibles ni pagos.
  • EV SSL es imprescindible si tu sitio representa una empresa, gestiona transacciones, o necesita máxima confianza y respaldo legal.

Si tu web es corporativa o comercial, el EV SSL transmite profesionalismo y seguridad jurídica. Si es un blog o proyecto personal, Let’s Encrypt puede ser suficiente. ¿Quieres que te ayude a instalar uno u otro en tu hosting?

Guía para insertar un reloj analógico en WordPress

Guía para insertar un reloj analógico en WordPress

Mantén a la vista el Reloj Analógico en tu sitio de WordPress, fácil de insertar, y con un potente efecto visual. El Reloj Analógico se adapta a todos los dispositivos.

⏰ Añade un reloj analógico en tu WordPress

¿Quieres mostrar la hora en tu sitio web con un reloj analógico elegante? Aquí tienes un código completo que puedes insertar en el widget de barra lateral de tu WordPress.

RELOJ WEB

Pasos:

  1. Entra en tu panel de administración de WordPress.
  2. Ve a Apariencia > Widgets.
  3. Añade un widget de tipo HTML personalizado en la barra lateral.
  4. Copia y pega el siguiente código completo en el widget:

html

<html>
<head>
<title>RELOJ WEB</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.reloj-container {
  display: flex;
  justify-content: center;
  align-items: center;
  width: 100%;
  max-width: 420px; /* tamaño máximo */
  margin: 0 auto;   /* centra horizontalmente */
  padding: 10px;
  box-sizing: border-box;
}
canvas {
  width: 100%;
  height: auto;
  display: block;
}
</style>
</head>

<body>
  <div class="reloj-container">
    <canvas id="my_canvas" width="420" height="420"></canvas>
  </div>

<script>
var angle_jump=6;
var dt= new Date();

sec = dt.getSeconds()*angle_jump;
var min=dt.getMinutes();
min=min*angle_jump; 
min=min + (sec/360)
var hour=dt.getHours();
hour=hour*30;   
hour=hour + (min/12);

var ang_second=90-sec;
var ang_minute=90-min;
var ang_hour=90-hour;

var r=100;
var my_canvas=document.getElementById("my_canvas");
var gctx = my_canvas.getContext("2d");

var x=my_canvas.width/2;
var y=my_canvas.height/2;
speed=1000;
arc_angle=10;

my_function=function my_function(){
gctx.clearRect(0, 0, my_canvas.width,my_canvas.height);

// círculo exterior con sombra
gctx.beginPath();
gctx.strokeStyle= '#0B033B';
gctx.lineWidth=10;
gctx.shadowColor = 'rgba(0,0,0,0.5)';
gctx.shadowBlur = 15;
gctx.shadowOffsetX = 5;
gctx.shadowOffsetY = 5;
gctx.arc(x,y,r*1.4,0,2*Math.PI);
gctx.stroke();

// reset sombra
gctx.shadowColor = 'transparent';
gctx.shadowBlur = 0;
gctx.shadowOffsetX = 0;
gctx.shadowOffsetY = 0;

gctx.lineWidth=1;

// números y marcas
var h=2;
gctx.textAlign = "center";
gctx.textBaseline = "middle";
gctx.font = '36px serif';

for(j=0;j<360;j += angle_jump){
  j_radian=j*(Math.PI/180);
  gctx.beginPath();
  gctx.strokeStyle= '#464623';

  if((j % (5*angle_jump))==0){
    var y1_text=y+ 0.85*r*Math.sin(j_radian);
    var x1_text=x+ 0.85*r*Math.cos(j_radian);
    if(h<12){ h=h+1; } else { h=1; }

    // sombra en números
    gctx.shadowColor = 'rgba(0,0,0,0.4)';
    gctx.shadowBlur = 6;
    gctx.shadowOffsetX = 2;
    gctx.shadowOffsetY = 2;
    gctx.fillText(h,x1_text,y1_text);

    // reset sombra
    gctx.shadowColor = 'transparent';
    gctx.shadowBlur = 0;
    gctx.shadowOffsetX = 0;
    gctx.shadowOffsetY = 0;

    // rayas largas en todos los números
    var y1_out = y + 1.05*r*Math.sin(j_radian);
    var x1_out = x + 1.05*r*Math.cos(j_radian);
    var y2_out = y + 1.3*r*Math.sin(j_radian);
    var x2_out = x + 1.3*r*Math.cos(j_radian);
    gctx.moveTo(x1_out,y1_out);
    gctx.lineTo(x2_out,y2_out);
    gctx.stroke();

  } else {
    // rayas normales
    var y1_out = y + 1.1*r*Math.sin(j_radian);
    var x1_out = x + 1.1*r*Math.cos(j_radian);
    var y2_out = y + 1.2*r*Math.sin(j_radian);
    var x2_out = x + 1.2*r*Math.cos(j_radian);
    gctx.moveTo(x1_out,y1_out);
    gctx.lineTo(x2_out,y2_out);
    gctx.stroke();
  }
}

// segundero
gctx.beginPath();
gctx.strokeStyle= '#7CC0F5';
var startAngle=(1/180) * (360-ang_second);
var a_end_ang=(1/180) * (360-(ang_second + 180 -arc_angle));
var a_start_ang=(1/180) *(360-(ang_second + 180 + arc_angle));
var y1=y+ r*Math.sin(startAngle*Math.PI);
var x1=x+ r*Math.cos(startAngle*Math.PI);
gctx.moveTo(x1,y1);
gctx.arc(x,y,0.3*r,a_start_ang*Math.PI,a_end_ang*Math.PI);
gctx.lineTo(x1,y1);
gctx.fillStyle = '#7CC0F5';
gctx.fill();
gctx.stroke();

// minutero
gctx.beginPath();
gctx.strokeStyle= '#181500';
var startAngle=(1/180) * (360-ang_minute);
var a_end_ang=(1/180) * (360-(ang_minute + 180 -arc_angle));
var a_start_ang=(1/180) *(360-(ang_minute + 180 + arc_angle));
var y1=y+ 0.9*r*Math.sin(startAngle*Math.PI);
var x1=x+ 0.9*r*Math.cos(startAngle*Math.PI);
gctx.moveTo(x1,y1);
gctx.arc(x,y,0.3*r,a_start_ang*Math.PI,a_end_ang*Math.PI);
gctx.lineTo(x1,y1);
gctx.fillStyle = '#181500';
gctx.fill();
gctx.stroke();

// horario
gctx.beginPath();
gctx.strokeStyle= '#181500';
var startAngle=(1/180) * (360-ang_hour);
var a_end_ang=(1/180) * (360-(ang_hour + 180 -(arc_angle*2)));
var a_start_ang=(1/180) *(360-(ang_hour + 180 + (arc_angle*2)));
var y1=y+ 0.8*r*Math.sin(startAngle*Math.PI);
var x1=x+ 0.8*r*Math.cos(startAngle*Math.PI);
gctx.moveTo(x1,y1);
gctx.arc(x,y,0.15*r,a_start_ang*Math.PI,a_end_ang*Math.PI);
gctx.lineTo(x1,y1);
gctx.fillStyle = '#181500';
gctx.fill();
gctx.stroke();

// círculo central
gctx.beginPath();
gctx.strokeStyle= '#000000';
gctx.arc(x,y,3,0,2*Math.PI); 
gctx.fillStyle = '#282746';
gctx.fill();
gctx.stroke();

my_function2();
}

my_function2=function my_function2(){
if(ang_second > -264){  
  ang_second=ang_second-angle_jump;
  setTimeout('my_function()',speed);
}else{
  ang_second=90;
  if(ang_minute > -264){
    ang_minute=ang_minute - angle_jump;
  }else{
    ang_minute=90;
    ang_hour=ang_hour-angle_jump;
  } 
  setTimeout('my_function()',speed);
}
}

my_function();
</script>
</body>
</html>

3. Guardar y comprobar

  • Guarda el widget.
  • Ve a tu sitio y verás el reloj analógico funcionando en la barra lateral.

Resumen de la creación del reloj analógico

  1. Canvas de HTML5
    • El reloj se dibuja dentro de un elemento <canvas> de HTML.
    • Este canvas es un área gráfica donde se pueden trazar líneas, círculos y texto con JavaScript.
  2. Contexto gráfico (getContext("2d"))
    • Se obtiene el contexto 2D del canvas, que permite dibujar formas y aplicar estilos.
    • Con este contexto (gctx) se trazan los círculos, rayas y números.
  3. Cálculo de ángulos
    • Cada segundo equivale a 6° (360° / 60).
    • Cada minuto también equivale a 6°.
    • Cada hora equivale a 30° (360° / 12).
    • Se calculan los ángulos de las agujas en función de la hora actual (Date()).
  4. Dibujo de la esfera
    • Se dibuja un círculo exterior con borde azul oscuro y sombra para dar volumen.
    • Se añaden las rayas de los minutos y las rayas más largas en las posiciones de las horas.
    • Los números (1–12) se colocan alrededor del círculo, centrados y con sombra.
  5. Agujas del reloj
    • Segundero: delgado y de color azul claro.
    • Minutero: más grueso y oscuro.
    • Horario: más corto y ancho.
    • Cada aguja se dibuja como una línea con un pequeño arco en la base para dar efecto.
  6. Centro del reloj
    • Se dibuja un pequeño círculo en el centro para cubrir las uniones de las agujas.
  7. Animación
    • Una función (my_function) redibuja el reloj cada segundo.
    • Se usa setTimeout para actualizar los ángulos y mover las agujas en tiempo real.
  8. Estilos y centrado
    • El reloj se coloca dentro de un contenedor .reloj-container con CSS flexbox para que quede centrado en ordenador y móvil.
    • El canvas es responsivo (width:100%) para adaptarse al ancho del widget.

En resumen

El reloj se construye con:

  • HTML → para definir el canvas.
  • CSS → para centrarlo y hacerlo responsivo.
  • JavaScript → para calcular la hora, dibujar la esfera, los números, las rayas y las agujas, y actualizarlo cada segundo.

Esquema visual (imaginado)

  1. Círculo exterior → esfera del reloj.
  2. Rayas cortas → minutos.
  3. Rayas largas + números → horas.
  4. Agujas → hora, minuto y segundo.
  5. Centro → círculo pequeño que une las agujas.
  6. Animación → función que actualiza cada segundo.

En conclusión: el reloj se construye combinando HTML (canvas)CSS (centrado y responsivo) y JavaScript (cálculo de ángulos y animación).

Esquema visual del reloj analógico

1. Esfera del reloj

  • Un círculo exterior con borde azul oscuro y sombra.
  • Representa la base del reloj.

Código

   ●───────────────●
  /                 \
 ●                   ●
  \                 /
   ●───────────────●

2. Marcas de minutos y horas

  • 60 rayas alrededor de la esfera.
  • Las rayas de las horas (1–12) son más largas.
  • Sirven de guía para colocar los números.

Código

|   |   |   |   |   |   |   |   |   |

3. Números (1–12)

  • Colocados en posiciones radiales usando trigonometría.
  • Separados del borde para que no se peguen a las rayas.
  • Con sombra para dar volumen.

Código

       12
   11      1
10            2
   9        3
       6

4. Agujas

  • Segundero: delgado y azul claro.
  • Minutero: más largo y oscuro.
  • Horario: más corto y ancho.
  • Cada aguja se dibuja según el ángulo calculado con la hora actual.

Código

       |
       |
   ----●----
       |

5. Centro del reloj

  • Un pequeño círculo que cubre la unión de las agujas.
  • Da un acabado limpio y elegante.

6. Animación

  • Una función en JavaScript (my_function) redibuja el reloj cada segundo.
  • Se actualizan los ángulos de las agujas con la hora real (Date()).
  • Se usa setTimeout para que el reloj se mueva en tiempo real.

Resumen gráfico

  1. Esfera → círculo exterior con sombra.
  2. Marcas → rayas cortas y largas.
  3. Números → colocados alrededor con sombra.
  4. Agujas → hora, minuto y segundo.
  5. Centro → círculo pequeño.
  6. Animación → actualización cada segundo.

Ver otro ejemplo de Reloj Analógico.

Publicidad