Desarrollo web y WordPress
Base de conocimientoNotas para desarrollar y mantener aplicaciones web sin esconder las decisiones detrás de una línea mágica. Incluyen configuración, compatibilidad y pruebas sencillas para saber si el cambio hizo lo que pretendías.
PYTHON · RENDIMIENTOPython quitará su JIT: lo he encendido y medido en la 3.15El JIT de CPython saldrá de main. Lo he encendido en el Python 3.15 de uv: +11,6 % en pyperformance, casi nada en un guion de registros y un aborto con systemd endurecido.Abrir →PYTHON · SEGURIDADLiteLLM 1.107.0 y el .pth que Python aún ejecuta al arrancarEl LiteLLM envenenado del 21 de octubre corría con un .pth en cada arranque de Python, pip incluido. Cómo buscarlo sin arrancar Python y cómo hacer esperar a pip.Abrir →SEGURIDAD · PHPPHP2Shell: cómo parchear PHP si tu proveedor no llegaPHP2Shell ha obligado a revisar mis proyectos, incluido este blog. Cómo verificar el parche y contener el riesgo cuando tu proveedor no ofrece el paquete corregido.Abrir →WORDPRESS · TLSUbuntu retira una raíz de eMudhra; WordPress 7.1.3, aún noLa API HTTP de WordPress 7.1.3 aún acepta certificados firmados con las claves comprometidas de eMudhra porque verifica con su propia lista. Qué arregla el paquete de Ubuntu y un mu-plugin para usar el almacén del sistema…Abrir →PYTHON · RENDIMIENTOPython 3.15 trae lazy import y lo he medido en un CLIMi primer lazy import en Python 3.15 acabó en SyntaxError. Compilé la 3.15.0, medí el arranque de un CLI de prueba con y sin imports perezosos y comprobé qué cambia con el UTF-8 por defecto…Abrir →PYTHON · CLOUDFLAREPython Workers llega a GA: FastAPI, Flask y Django sin JSCloudflare da por terminada la beta de Python Workers: qué cambia, qué límites siguen y cuándo compensa frente a un VPS.Abrir →WORDPRESS · DISEÑOBrokenUFO: diseñar un archivo de misterio con WordPressBrokenUFO empezó con una conversación con Rogelio , amigo y aficionado al misterio. Quería una web para publicar casos, documentos y preguntas con contexto. Mi trabajo era darle una…Abrir →NGINX · PLESKNginx en Plesk: compresión y caché sin romper la aplicaciónNginx suele encargarse del tráfico que llega primero a una web alojada en Plesk. Su papel puede ser servir archivos estáticos, actuar como proxy de Apache o pasar las peticiones PHP…Abrir →APACHE · PLESKApache en Plesk: optimizar con medidas, no con recetasAntes de «optimizar Apache», conviene averiguar qué está atendiendo Apache. En Plesk puede trabajar detrás de Nginx, ejecutar distintas configuraciones de PHP y compartir recursos…Abrir →SERVIDOR WEBApache frente a Nginx: arquitectura, pruebas y contextoEscribí esta comparación en junio de 2020, al cumplirse veinte años desde que publiqué mi primera web. Me apetecía celebrarlo con dos herramientas que me han acompañado…Abrir →MARIADB · PLESKActualizar MariaDB en Plesk: una migración recuperableEsta entrada nació de una actualización de MariaDB en Plesk, de la rama 5.5 a la 10.3. Esas versiones pertenecen al archivo histórico , no son un destino recomendado para una…Abrir →BASES DE DATOSMySQL y MariaDB en Plesk: medir antes de optimizarOPTIMIZE TABLE no es un botón universal para acelerar MySQL o MariaDB. Puede reorganizar almacenamiento según el motor y la versión, pero también consumir espacio, generar trabajo…Abrir →CACHÉ · PLESKMemcached en Plesk: instalar, proteger y verificarMemcached puede reducir consultas repetidas guardando datos temporales en memoria. En WordPress, instalar el demonio no basta: necesitas también un cliente compatible con la versión…Abrir →WORDPRESS · MIGRACIÓNTrasladar WordPress a otro dominio sin romper los datosLa primera vez que trasladé un WordPress entre dominios fue para Brave Heart CAC . Cambiar home y siteurl era sencillo; el problema estaba en las URLs guardadas dentro de entradas,…Abrir →WORDPRESS · NGINXEnlaces permanentes de WordPress con Nginx y PleskCuando WordPress funciona en la portada pero devuelve 404 en las entradas, conviene mirar cómo llega la petición a PHP. En Plesk, Nginx puede actuar como proxy de Apache o atender…Abrir →APACHE · URLSmod_rewrite: URLs limpias sin perder archivos ni parámetrosmod_rewrite permite transformar cómo Apache resuelve una URL sin obligar al visitante a conocer la estructura interna de los archivos. Para una aplicación con un controlador…Abrir →ANGULAR · APACHEAngular en Apache: rutas al recargar y reglas .htaccessDurante mi trabajo con Angular en Shure, en Chicago, me encontré con un problema habitual al desplegar una SPA: la navegación dentro de la aplicación funcionaba, pero recargar una…Abrir →CSS · MÓVIL100vh en móviles: cuándo usar svh, lvh y dvhMientras adaptaba CLABA a móviles me encontré con un clásico: un bloque de 100vh que parecía correcto en escritorio y quedaba parcialmente escondido tras la interfaz del navegador…Abrir →JAVASCRIPT · STRINGSCómo borrar el último carácter de una cadena en JavaScriptCuando construyes una lista concatenando valores y comas, es fácil acabar con un separador de más. En JavaScript puedes quitarlo con slice() , aunque para una lista suele ser mejor…Abrir →JAVASCRIPT · BÚSQUEDAJavaScript: 5 formas de saber si una cadena contiene otraEn una aplicación que consultaba eXist recibía fragmentos de HTML por Ajax y necesitaba detectar determinadas palabras. Eso me llevó a comparar varias formas de buscar una subcadena…Abrir →JAVASCRIPT · EVENTOSSimular un clic en JavaScript: click() y dispatchEvent()Un cliente necesitaba que pulsar un enlace activara una pestaña de la interfaz. La solución fue despachar un evento hacia el elemento de destino. Pero hay una corrección importante…Abrir →NODE.JS · WINDOWSInstalar Node.js en Windows sin permisos de administradorA veces necesito usar Node.js en Windows sin hacer una instalación para todo el equipo. El ZIP oficial permite tener una copia dentro de la carpeta del usuario, siempre que las…Abrir →RUBY · SQLTraducir SQL a Active Record en Ruby on RailsUn amigo que estaba trasladando consultas de PHP a Ruby on Rails me pidió ayuda para contar ventas por cliente. La consulta parecía sencilla, pero el ejemplo original mezclaba un…Abrir →PAGOS · PAYPALPayPal IPN: investigar el error «handshake invalid»Al integrar PayPal IPN encontré el error «handshake invalid». La codificación del mensaje puede ser una causa, pero no es la única . Cambiar el juego de caracteres de la cuenta no…Abrir →HTML · CARACTERESCaracteres especiales en HTML: UTF-8 y tabla de entidadesMientras traducía plugins del foro Vanilla de Clásicos Básicos, en 2011, me encontré con acentos y caracteres que se mostraban mal. Guardé esta lista de entidades HTML para tener a…Abrir →TECLADO · SÍMBOLOSCódigos ALT: símbolos, cero inicial y tabla de consultaAlguna vez he terminado buscando un símbolo como ™ , © o ® cuando lo necesitaba para un proyecto. En 2010 dejé aquí una tabla de códigos ALT de mis apuntes para no repetir la búsqueda.Abrir →Entorno y alcance
Los fragmentos de configuración dependen de versiones, módulos y del proveedor. Compara el ejemplo con tu entorno, valida la sintaxis antes de recargar el servicio y conserva el archivo anterior. Para WordPress, prueba también como visitante anónimo: la caché y el consentimiento cambian el comportamiento que ve un usuario real.