miércoles, 22 de abril de 2026

Subir archivos grandes en Moodle

 Servidor web (NGINX o Apache)

En NGINX

Parámetro clave:

client_max_body_size 512M;
  • Esto define el tamaño máximo de subida
  • Valor típico por defecto: 1M o 2M (muy bajo)
  • Tú puedes subirlo a:
    • 128M (normal)
    • 256M (recomendado)
    • 512M (archivos grandes como videos)

 Se coloca en:

  • /etc/nginx/nginx.conf
  • o en config del sitio

Luego:

sudo systemctl reload nginx

PHP (MUY IMPORTANTE)

En php.ini debes ajustar:

upload_max_filesize = 512M
post_max_size = 512M
max_execution_time = 300
max_input_time = 300
memory_limit = 512M

post_max_size debe ser ≥ upload_max_filesize

Luego reinicia:

sudo systemctl restart php-fpm

(o apache si usas Apache)


Moodle (dentro del sistema)

Ir a:

Administración del sitio → Seguridad → Políticas del sitio

Configurar:

  • Tamaño máximo de archivo → 512MB (o el que quieras)

También en:

  • Curso → Configuración → Tamaño máximo de subida

Resumen rápido

Para subir archivos grandes:

NivelParámetroEjemplo
NGINXclient_max_body_size512M
PHPupload_max_filesize512M
PHPpost_max_size512M
MoodleTamaño máximo archivo512MB

Error típico

Si uno de estos es menor → falla la subida
(Moodle muestra error aunque tengas todo lo demás bien)

Configurar SMTP en Moodle (no gmail)

Si Moodle no envía correos, puedes configurar el SMTP directamente en el archivo config.php. 

1. Editar archivo

Ubica y abre:

/config.php

2. Añadir configuración SMTP

Agrega al final del archivo:

$CFG->directorypermissions = 0777;
$CFG->smtphosts = 'ssl://smtp.serviciodecorreo.es:465';
$CFG->smtpuser = 'tu_correo@tudominio.com';
$CFG->smtppass = 'tu_contraseña';
$CFG->smtpsecure = 'ssl';
$CFG->smtpauthtype = 'LOGIN';


3. Datos necesarios
  • Servidor SMTP: smtp.serviciodecorreo.es
  • Puerto: 465 (SSL)
  • Usuario: correo completo
  • Contraseña: la del correo

Notas importantes

  • Asegúrate de que el servidor permita conexiones SMTP (puerto 465 o 587)
  • Si no funciona con SSL, prueba:
    • tls con puerto 587
  • Verifica que el correo existe y la contraseña es correcta

Resultado

Con esta configuración, Moodle podrá enviar correos correctamente .

domingo, 12 de abril de 2026

Notas: Framework ACHIEVE para el uso de IA

No todos los problemas deben resolverse con IA. El framework ACHIEVE ayuda a identificar cuándo la Inteligencia Artificial es la herramienta correcta, con el fin de aumentar nuestra propia inteligencia y capacidad crítica, en lugar de solo depender de la tecnología.

Los 5 Pilares de ACHIEVE:

  1. A – Aid Human Coordination (Coordinación Humana): La IA como facilitadora entre personas.

    • Ejemplo: Resúmenes de reuniones, agendas compartidas o alineación de equipos.

  2. C – Cut Out Tedious Tasks (Eliminar lo Tedioso): Automatizar tareas repetitivas que no aportan valor creativo.

    • Ejemplo: Clasificar correos masivos o reformatear grandes bases de datos.

  3. H – Help Provide a Safety Net (Red de Seguridad): Usar la IA para revisar, verificar y detectar riesgos.

    • Ejemplo: Auditoría de contratos, detección de errores en código o análisis de "qué podría salir mal".

  4. I-E-V – Inspire bEtter problem solving and creatiVity (Inspiración y Creatividad): Salir de nuestra zona de confort mental.

    • Uso: Evitar resolver todo de la misma forma (sesgo) usando la IA para brainstorming, analogías y ángulos de resolución que no habíamos considerado.

  5. E – Enable Great Ideas to Scale Faster (Escalabilidad): Llevar una buena idea a un impacto mayor rápidamente.

    • Ejemplo: Traducir contenido a varios idiomas o adaptar un solo concepto a múltiples formatos (blog, redes sociales, video)

    • Conclusión: Antes de lanzar un prompt, haz una pausa y pregunta: ¿Este problema encaja en ACHIEVE? El objetivo real de la IA no es reemplazarnos, sino servir de palanca para elevar nuestro pensamiento crítico y nuestra creatividad.

viernes, 13 de febrero de 2026

Consultas SQL valiosas para moodle

 SELECT 

    table_name,

    ROUND((data_length + index_length) / 1024 / 1024 / 1024, 2) AS size_gb

FROM information_schema.TABLES

WHERE table_schema = 'campus'

ORDER BY size_gb DESC;


SELECT

   ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS total_gb

FROM information_schema.TABLES

WHERE table_schema = 'campus';


SELECT table_name,

       ROUND((data_length + index_length) / 1024 / 1024, 2) AS size_mb

FROM information_schema.TABLES

WHERE table_schema = 'mdlsimb'

ORDER BY size_mb DESC


Borrar logs de antes del 2025

SELECT COUNT(*) AS registros_a_borrar

FROM mdl_logstore_standard_log

WHERE timecreated < UNIX_TIMESTAMP('2025-01-01');


DELETE FROM mdl_logstore_standard_log

WHERE timecreated < UNIX_TIMESTAMP('2025-01-01')

LIMIT 50000;



OPTIMIZE TABLE mdl_logstore_standard_log;

SHOW VARIABLES LIKE 'innodb_file_per_table';

ANALYZE TABLE mdl_logstore_standard_log;


martes, 10 de febrero de 2026

Como bloquear dominio y apuntar a un subdominio con usuario y clave en Cloud Panel AWS

Pasos para  bloquear Dominio y apuntar a un subdominio con usuario y clave en Cloud Panel AWS

1️⃣ DNS (SiteGround)

  • Crear subdominio nuevo (ej: subdominio.abc.com)

  • Apuntarlo a la misma IP del servidor AWS

2️⃣ CloudPanel / Nginx

En security activar basic authentication y crear el usuario con contraseña encriptada

En el mismo site:

  • server_name incluye:

    dominio.abc.com subdominio.abc.com
  • Bloquear dominio viejo:

    if ($host = "dominio.abc.com") { return 403; }
  • Proteger acceso (Basic Auth):

    auth_basic "Acceso restringido"; auth_basic_user_file /etc/nginx/.htpasswd;
  • Añadir noindex:

    add_header X-Robots-Tag "noindex, nofollow" always;

3️⃣ Dónde va la app

  • Ambos dominios apuntan a la misma carpeta del proyecto

  • No duplicar archivos

  • No crear otra instancia

4️⃣ Probar

  • Dominio viejo → 403

  • Subdominio nuevo → pide usuario/clave

  • Sin login → no se carga nada

  • Google → no indexa

RECORDATORIO IMPORTANTE

  • Esto protege el acceso, no el código del front

  • Un usuario autorizado siempre puede ver el JS

  • Para proteger el producto, es necesario crear backend

miércoles, 24 de diciembre de 2025

Flujo para Aceptar presupeusto en Holded

El flujo cuando el presupuesto pasa a aceptado: 

Presupuesto → Convertir a factura

 Factura aprobada dando a guardar

martes, 23 de diciembre de 2025

Restringir por IP aplicativos en Nginx (muy fácil y eficaz)

 

Restringir por IP (muy fácil y eficaz)

Si el cliente accede desde IPs concretas:

location / { allow 123.123.123.123; # IP del cliente allow 111.111.111.111; # otra IP deny all; }

Blogs Colombia