Recargando un servidor de Node.js con WebSocket

Un sencillo servidor corriendo sobre Node.js puede permitir la recarga sin interrupciones, de manera amistosa, algo parecido al reload de Apache u otros demonios en Linux. Para ello sólo es necesario que haya un proceso padre que lance hijos y les envíe señales según sea necesario. Sin embargo el cierre de las conexiones esperando a que estas terminen puede dar algunas complicaciones cuando hay un WebSocket.

La gestión de padre e hijos se puede hacer con el módulo cluster. En este ejemplo el script a lanzar manualmente es master.js. Él a su vez lanzará al script server.js y le pasará las señales SIGHUP para recargar el servidor (terminar amistosamente) o SIGTERM para terminar sin piedad.

master.js:

'use strict';

var cluster = require('cluster');
const path = require('path');

cluster.setupMaster({
  exec: path.join(__dirname, 'server.js')
});

//fork the first process
cluster.fork();

process.on('SIGHUP', function () {
  var new_worker = cluster.fork();
  new_worker.once('listening', function () {
    //stop all other workersS
    for (var id in cluster.workers) {
      if (id === new_worker.id.toString()) continue;
      cluster.workers[id].process.kill('SIGHUP');
    }
  });
}).on('SIGTERM', function () {
  for (var id in cluster.workers) {
    cluster.workers[id].process.kill('SIGTERM');
  }
});

[…] (continuar leyendo)

WordPress y cron

WordPress tiene su particular manera de utilizar cron. Como no todos los alojamientos permiten programar tareas, WordPress tiene el script wp-cron.php que se ejecuta en cada carga de cualquier página y comprueba si hay cosas por hacer. Y llevo tiempo preguntándome si la llamada a ese script puede afectar innecesariamente al rendimiento. Esto es un blog pequeño, pero en uno con muchas visitas puede que sí que afectara de manera notable.

Hay complementos para WordPress como Cron View que ayudan a controlar las tareas pendientes. Sin embargo, como no me gusta abusar de plugins, me ha dado por aprovechar que mi alojamiento me permite añadir trabajos al cron. Total que:

  1. He deshabilitado la ejecución automática del script wp-cron.php añadiendo en wp-config.php la línea:

    define('DISABLE_WP_CRON', true);

  2. He añadido la siguiente tarea a cron:

    */15 *     *     *     *     wget -q -O /dev/null http://DOMINIO/wp-cron.php

De manera que cada quince minutos se ejecute el script y el resto del tiempo WordPress se esté quieto. Pero la cuestión es si esto realmente afectará para bien o para mal al funcionamiento. Así que si estos días empeora la página ya tengo un candidato a culpable. 😀

Fuente → WordPress – using a crontab for wp-cron [Savannah W-ITS]

Optimizado de imágenes en PNG

En complemento a los consejos de accesibilidad para una web que expuse el año pasado hoy me ha dado por las imágenes en formato PNG. Un formato que siempre al principio parece que ocupa demasiado en comparación con otros como GIF o JPG, pero que comprime sin pérdida. Sin embargo, en cuanto al GIF se refiere, puede acortar distancias de tamaño con una buena optimización. Frente al JPG no me mojaría tanto.

Photoshop y otros tantos programas llevan su propio optimizado. Pero hay otros mucho más sencillos a los que por consola se le indica el archivo, hacen la conversión con parámetros diferentes, eligen la que da mejor resultado y devuelven el archivo aligerado. En la página de formatos de Imagemagick se mencionan varios. Destaco un par de ellos […] (continuar leyendo)

Corregir ruidos en Flash para Linux AMD64

Cada año o así a la gente de Adobe le suele surgir un problema con su plugin de Flash para Linux sobre la plataforma de 64 bits, concretamente la versión 10.3 d162. Esta vez se trata de unos ruidos molestos que aparecen en vídeos, juegos y demás donde dicho plugin tenga que entrar en marcha. En mi caso se me asemejan a cortes y distorsiones que se repiten a lo largo de toda la reproducción. Pero de momento tiene arreglo.

Según comentan en la sección de bugs se trata de problemas que tiene Flash con la implementación memcpy de glibc. Mientras glibc lo corrige en la distribución que utilicen, o Adobe en sus siguientes versiones —lo cual sí que sería novedoso— hay que usar un parche:

  1. Instalar si no lo está el paquete bspatch.
  2. Descargar el parche de aquí o de este hilo de los informes de errores de Adobe.
  3. Copia de seguridad de la librería por si las moscas: # cp /usr/lib64/flash-plugin/libflashplayer.so /usr/lib64/flash-plugin/libflashplayer.so.old
  4. Ubicarse en la consola en donde se halle guardado el parche descargado.
  5. Parchear la librería con: # bspatch /usr/lib64/flash-plugin/libflashplayer.so.old /usr/lib64/flash-plugin/libflashplayer.so ./memcpy-10.3.162.29.bsdiff
  6. Cerrar y volver a abrir el navegador web y probar si funciona.

Ojo: # indica que han de ejecutarse los comandos desde root o mediante sudo … Como corresponda a cada sistema.

Enviar menos información sobre Apache

Por el motivo que sea puede que quieran que el servidor web Apache desvele algo menos de información de la que acostumbra. Para ello hay un par de directivas muy interesantes y que se configuran, al menos en el caso de Debian, en el archivo /etc/apache2/conf.d/security:

  • ServerSignature. Es la más conocida y la responsable de que cuando Apache devuelve un documento generado por él mismo, como mensajes de error, en el pie del mismo informe de su versión, sistema operativo, correo del administrador,.. Para evitarlo se cambia su parámetro a off, quedando: ServerSignature Off.
  • ServerTokens. Es la que dice qué información se devuelve, tanto en el pie de página —si lo está— como en las cabeceras de la respuesta del servidor web. Tiene varios niveles de mostrar información. El más restrictivo consiste en sólo informar del nombre del servidor web: Apache. Esto se logra con el parámetro Prod: ServerTokens Prod.

Apache sería pues un poco más disimulado con la información del servidor web que envía al cliente —también a nivel de cabeceras:

Enviar menos información sobre Apache

Desactivando el «servicio de aviso de llamadas perdidas» de Movistar

En las últimas semanas Movistar se ha sacado de la chistera mágica que tiene de producir dinero un nuevo invento: el servicio de aviso de llamadas perdidas. Muchos no lo conocerán por su nombre, pero sí por lo que hace. Es con lo que nos encontramos muchos últimamente al llamar a un número que no se encuentra disponible. Una grabación que nos invita a dejar un mensaje de voz que será enviado mediante SMS a dicho número.

La ventaja con el buzón de voz es que no supone coste para el llamante nada más saltar la voz, pero sí como dejemos mensaje. Es fácil de comprobar ipso facto porque nuestro terminal no activará el contador de tiempo que dura la llamada. Sin embargo al que se le ocurra hacer caso de la invitación y grabar un mensaje la compañía se lo cobrará como si hubieran descolgado. Luego entonces puede salir más caro que si mandamos nosotros mismos el SMS. Así pues aunque de otra manera algo diferente viene siendo lo mismo al buzón de voz. Dejamos un mensaje pagando y el destinatario lo consulta sin coste alguno para él. […] (continuar leyendo)

Incrustar presentaciones de SlideShare sin Flash

Con tantas innovaciones de cara al HTML5 todavía hay servicios que se resisten a ofrecer sus contenidos en dicho formato. Lo más típico son sin duda los de presentaciones y vídeos. Aunque YouTube y Vimeo se van poniendo las pilas, otros servicios como SlideShare siguen requiriendo de Flash si se quiere incrustar alguna de sus presentaciones. Pero como casi todo, tiene arreglo. 😀

La ñapa consiste en utilizar una web que hace de intermediaria que ofrece un iframe basado en HTML, hojas de estilo en cascada y JavaScript: http://icant.co.uk/slidesharehtml. No es que sea muy aficionado a los scripts, pero algo es algo. Basta con acceder e ingresar la URL de la presentación de SlideShare, indicar una anchura si se precisa de una concreta y pulsar en el botón give me the embed!

Y para muestra una presentación llamada Universo chino que me enviaron hace un par de días. Buenísima por cierto: