Bugs: Firefox, favicon y webs protegidas

Este artículo va sobre esos bugs puñeteros e imposibles que se diagnostican con facilicidad cuando tienes acceso a los recursos apropiados. En este caso, los logs del servidor web.

Este bug es simple de explicar: Si una web está protegida con usuario/clave, lo normal es que el favicon no funcione en Firefox. ¿Por qué?. Porque cuando Firefox solicita el favicon al servidor no envía las credenciales y el servidor web le denegará el acceso.

En el log del servidor web veía algo de este estilo:

IP - [15/Oct/2015:12:06:26 +0200] "GET /icons/favicon.png HTTP/1.1" 401 381 [...]

El código 401 indica acceso denegado.

La solución obvia es "desproteger" el favicon de forma selectiva. En Apache HTTP Server sería algo de este estilo:

Leer más…

Estadísticas y análisis del podcast "Python en español"

Python en español es, por ahora al menos, el único podcast sobre Python en nuestro idioma. Su twitter es @Python_podCAST. Lo llevamos Samuel de Ancos (@sdeancos), Juan Ignacio Rodríguez (@jileon) y yo (@jcea). Hemos publicado seis números hasta el momento, suficiente para poder mostrar algunas estadísticas de descargas.

Mucho software de estadísticas contabilizaría las descargas con los hits en el servidor web. Esto es apropiado (más o menos) para páginas webs normales, pero un podcast es muy diferente. Para empezar, suele medir varios megabytes, y los navegadores web y el software de podcast suelen realizar múltiples peticiones parciales al escuchar un audio por streaming. Mi software tiene en cuenta este hecho: no contabilizo los hits sino que llevo la cuenta de los bytes descargados y, sabiendo lo que mide cada episodio, tenemos una estimación precisa del número de oyentes del podcast.

Empecemos.

Leer más…

HTTP/2 ha llegado y aquí lo tienes funcionando

HTTP/2 se publicó de forma oficial en mayo de 2015, como RFC 7540. La semántica no ha cambiado respecto al viejo HTTP/1.1, pero HTTP/2 proporciona un mecanismo de transporte diferente con varias mejoras interesantes. En particular, se pueden multiplexar varias peticiones HTTP concurrentes a través de una única conexión TCP/IP. Esto reduce la latencia considerablemente mientras, de forma simultánea, se reduce la carga en el servidor.

Todos los navegadores modernos (incluyendo las versiones recientes de Android y de iOS) soportan HTTP/2. Bien. Más aún, Chrome y Firefox solo intentarán usar HTTP/2 cuando la conexión se realice de forma segura (HTTPS). Genial. Dado que HTTP/2 supone una mejora real pero simple de desplegar y que dicho despliegue supone migrar a HTTPS, esta jugada es -de hecho- un buen incentivo para que las webs migren a HTTPS.

La versión 2.4.17 de Apache HTTP Server incluye soporte de HTTP/2 de forma nativa. A fecha de hoy, esto requiere compilar Apache HTTP Server 2.4.17 o superior desde el código fuente y además:

Leer más…

Limpieza selectiva de buzones IMAP4

En el artículo ¿Qué buzones IMAP4 me están consumiendo disco? explico cómo localizar fácilmente las carpetas IMAP4 que nos interesa limpiar. Lo más sencillo sería, simplemente, borrar el correo que no nos interesa, archivarlo, etc., pero la definición de "que no nos interesa" puede no estar muy bien definida.

En este artículo presento un script Python que realiza una limpieza de una carpeta IMAP4 remota de la siguiente manera:

Leer más…

¿Qué buzones IMAP4 me están consumiendo disco?

Tengo asignados 20 gigabytes de disco para mi correo IMAP4. No es suficiente. Lo lleno regularmente y necesito hacer limpieza.

Podría ir a lo loco e ir borrando el contenido de las carpetas de correo que no estoy viendo con regularidad, pero es más inteligente elegir con cuidado a qué carpeta dedicas tu tiempo.

Una forma simple es listar todas tus carpetas IMAP4 y ordenarlas por tamaño.

Si tenemos un servidor Dovecot, la cosa es simple:

$ doveadm mailbox status vsize "*" | sort -t = -k 2 -n

El resultado es algo de este estilo:

Archives vsize=0
Drafts vsize=0
hacking/madgeeks vsize=0
hacking/nessus vsize=0
hacking/security focus vsize=0
hacking/xen vsize=0
hacking/xen/xen-merge vsize=0
hacking/xen/xense-devel vsize=0
hacking/xen/xen-tools vsize=0
hardware/EE Times Europe vsize=0
...
hacking/dorkbot madrid/viernesopenlab vsize=162860821
proveedores/sun-managers/illumos/developer vsize=183877443
proveedores/ietf/OAuth vsize=187149218
0spam unsure vsize=246113462
proveedores/sun-managers/ZFS discuss/zfs-discuss@zfsonlinux vsize=311780227
personal vsize=396815094
Sent vsize=601400892
INBOX vsize=1944353534

Está claro qué carpetas IMAP4 vale la pena revisar, ¿no? :-)

El comando es bastante sencillo de entender. Tal vez lo más interesante sea el uso de sort para ordenar algo que, a priori, no tiene una estructura sencilla. La clave es decirle que el separador es el carácter = en vez de los espacios o el tabulador. Una vez separados, ignoramos el primer campo (nombre abitrariamente complejo, con espacios, tildes, etc) y nos quedamos exclusivamente con el número final... que usamos para ordenar la línea completa con la opción de ordenación numérica de sort.

Por curiosidad:

$ doveadm mailbox status vsize "*" | wc -l
483

Mis experimentos musicales (verano 2015)

Aunque me gusta la música, suelo oír poca: soy muy sensible a la música que no me gusta y me paso el día escuchando podcasts. Además, incluso la música que me gusta me aburre rápido y necesito darle un descanso.

Tengo la costumbre, no obstante, de experimentar con música nueva durante el verano. Es el momento en el que escucho música durante horas sin interrupción y es el momento, también, en que pido recomendaciones a todo el mundo sobre música nueva para probar. Mi lista de reproducción durante esas semanas es caótica y muy experimental. Hay que escuchar cada canción al menos tres veces para pillarle el gusto o no. De ahí hago una criba increíble y, con suerte, saco un par de intérpretes o un puñado de temas para añadir a mi colección permanente.

Aquí escucho casi de todo: música tradicional finlandesa, música polaca, tambores Taiko japoneses, black metal, bandas sonoras de películas, ópera... Si me coges el teléfono en verano y revisas la lista de reproducción, lo flipas. No todo lo que hay ahí es representativo de mi gusto musical. De hecho borraré la mayoría de los temas tras las tres reproducciones obligatorias (confieso que algunas cosas no llegan a sobrevivir tanto, pero lo intento) y gran parte del resto acabará en mi fondo de armario musical (cosas que te guardas, pero que casi nunca vuelves a escuchar). Esta inversión de tiempo auditivo tiene sus recompensas; casi todos los años acabo descubriendo alguna cosilla nueva (para mí) que me gusta.

El verano de 2015 ha sido raro. Mis amistades no han sido capaces de sugerirme nada que no conociese ya (la cristalización de gustos con la edad y la falta de tiempo que supone sentar la cabeza, ya sabes :-)) y el tiento que le he dado a aplicaciones de descubrimiento musical como Discovr Music ha sido interesante, pero infructuoso. Band of the Day ha dejado de funcionar el 31 de julio de 2015. Hasta he experimentado un poco con echonest y su API. No me ha ayudado a descubrir música nueva, pero me ha dado un par de ideas que espero poder desarrollar en el futuro.

Así que sí, el verano de 2015 ha sido extraño desde el punto de vista musical. Por primera vez en años me he encontrado sin novedades que echarme a la boca. He tirado de cosas antiguas y he hecho selección para que me entrase en los 500MB de espacio que puedo dedicar a música, ya durante el verano la prioridad son las fotos de viajes y de puestas de sol en la playa de Samil.

Cada canción en la lista tiene un motivo concreto para estar ahí. No están todas las que son, pero son todas las que están:

Leer más…

Estadísticas y análisis de "podcast 1984"

Podcast 1984 es un podcast sobre hacking, hacktivismo y seguridad informática en el que colaboro con varios amigos. Su twitter es @podcast1984. Veamos algunas estadísticas de descargas.

Mucho software de estadísticas contabilizaría las descargas con los hits en el servidor web. Esto es apropiado (más o menos) para páginas webs normales, pero un podcast es muy diferente. Para empezar, suele medir varios megabytes, y los navegadores web y el software de podcast suelen realizar múltiples peticiones parciales al escuchar un audio por streaming. Mi software tiene en cuenta este hecho: no contabilizo los hits sino que llevo la cuenta de los bytes descargados y, sabiendo lo que mide cada episodio, tenemos una estimación precisa del número de oyentes del podcast.

Empecemos.

Leer más…

Compiling OpenSSL in Solaris 10 with GCC 5.1.0

I got this error when trying to compile OpenSSL 1.0.2d on my Solaris machines:

[...]
gcc -I.. -I../.. -I../modes -I../asn1 -I../evp -I../../include  -fPIC -DOPENSSL_PIC -DZLIB_SHARED -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -O3 -Wall -DL_ENDIAN -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM   -c -o randfile.o randfile.c
In file included from /usr/include/stdio.h:21:0,
                 from randfile.c:65:
/usr/local/lib/gcc/i386-pc-solaris2.10/5.1.0/include-fixed/sys/feature_tests.h:346:2: error: #error "Compiler or options invalid for pre-UNIX 03 X/Open applications     and pre-2001 POSIX applications"
 #error "Compiler or options invalid for pre-UNIX 03 X/Open applications \
  ^
<builtin>: recipe for target 'randfile.o' failed
make[2]: *** [randfile.o] Error 1
make[2]: Leaving directory '/tmp/z/openssl-1.0.2d/crypto/rand'
Makefile:88: recipe for target 'subdirs' failed
make[1]: *** [subdirs] Error 1
make[1]: Leaving directory '/tmp/z/openssl-1.0.2d/crypto'
Makefile:283: recipe for target 'build_crypto' failed
make: *** [build_crypto] Error 1

Leer más…

Enlaces interesantes sobre Tor (julio 2015)

Algunos enlaces interesantes sobre Tor: