Las penas del Agente Smith

15/1/2009

Muere, píxel inmundo

Archivado en: Software libre, Geek World — Perpetrado por RinzeWind a las 7:00 am

(Aviso a navegantes: artículo práctico destinado principalmente a linuxeros con cámara de fotos digital. Quedan advertidos.)

Natural History Museum (21)

Ésa de ahí arriba es una de las fotografías que saqué en mi reciente viaje a Londres. Así de lejos parece muy mona pero, si nos acercamos un poco, se ve algo muy feo:

Punto azul

¡Darwin está mirando fijamente a un píxel azul! Los píxeles calientes (aparecen normalmente rojos o azules) y los píxeles muertos (aparecen negros) están causados por fallos en el funcionamiento del CCD de la cámara. Suelen aparecer más cuanto más larga es la exposición de la imagen.

A los pocos días de comprar esta cámara que tengo ahora, en verano, encontré uno muy cantoso en una esquina, de color rojo. El servicio técnico me reparó la cámara, aunque se tiró su buen mes para hacerlo. Mientras buscaba por Internet qué era exactamente lo que hacían (me extrañaba la idea de que sustituyesen el CCD entero), leí que las cámaras internamente llevan un registro de qué píxeles están jodidos y su ubicación exacta, con lo que los ignoran a la hora de hacer la fotografía y utilizan para rellenar el hueco un valor sacado de la interpolación de los píxeles adyacentes. Al volver de Londres encontré otros dos puntos azules, pero me daba mucha pereza volver a enviar la cámara, sobre todo ahora que me vuelvo a ir a otra ciudad de vacaciones en breve; así que empecé a ver si me podía sacar las castañas del fuego yo solito.

Estuve buscando programas que corrigiesen ese defecto de forma sencilla, sin tener que editar cada imagen por separado y sin que tardasen demasiado en procesarlas todas. Mi primera opción fue buscar algún plugin para el GIMP, pero no tuve mucho éxito. Lo mejor que encontré fue este pequeño script que permitía procesar un directorio lleno de imágenes, pero tenía dos problemas:

  • Había que introducir las coordenadas de cada píxel a mano. Si hay dos píxeles mal en cada imagen, hay que ejecutar el programa dos veces.
  • El manoseo que realiza de las imágenes hace que la imagen corregida ocupe más que la imagen original. La lógica me dictaba que un píxel que ahora se parece más a los de su entorno debería ayudar a comprimir la imagen, no al revés.

Lo guardé por si acaso no encontraba nada mejor, pero buscando un poco más terminé llegando a una pequeña maravilla: jpegpixi.

‘Jpegpixi’ is short for ‘JPEG Pixel Interpolator’. The intent of the program is to interpolate pixels (single pixels, dots, stripes) in JPEG images. This is useful to correct images from a digital camera with CCD defects. For example, if one pixel is always bright green, this pixel can be interpolated with jpegpixi.

Es justamente lo que andaba buscando. Además viene junto con otro programa, jpeghotp, que detecta qué píxeles son más brillantes en una fotografía completamente negra y localiza automáticamente sus coordenadas (jpegpixi necesita saber dónde están los píxeles que tiene que corregir). El procedimiento normal para obtener una imagen sobre la que realizar este tipo de detección es el de sacar una fotografía con largo tiempo de exposición, y a oscuras, pero no fui capaz de conseguirlo con éxito: veía sólo uno de los puntos; de forma que tuve que encontrarlos a mano sobre alguna imagen antigua que ya los mostrase, usando display, por ejemplo. Simplemente hay que anotar la coordenada de la esquina superior izquierda (porque siempre aparecen como cúmulos de píxeles, aunque haya estado hablando todo el rato de un píxel único) y las dimensiones del cuadrado que se formaría. Ejemplo de lo que se ve en realidad:

Zoom sobre el píxel defectuoso

Después de un rato de mirar y hacer pruebas, al final lo que tengo es un archivo de texto con este contenido:

579,527,7
1537,592,7

O dicho de otra forma: tengo dos puntos malos en mis fotografías. Uno está en 579×527 y el otro en 1537×592, y ambos grupos de píxeles defectuosos tienen unas dimensiones de 7×7. Si tenemos en cuenta que esto ocurre al disparar con un tamaño de imagen de 3264×2448 entendemos que es insignificante. El tamaño del cluster defectuoso lo he obtenido mediante ensayo y error, ejecutando el programa para una imagen y quedándome con el tamaño más pequeño que corrige el problema.

A continuación, y para terminar, hice un pequeño script que simplemente lanza este programa con todas sus opciones sobre toda imagen con extensión .jpg que haya en un determinado directorio:

#!/bin/sh

for imagen in *.jpg; do
echo -n “Corrigiendo $imagen… ”
jpegpixi -m 3 -f /home/chema/correccion_pixeles.txt $imagen $imagen.new
mv $imagen.new $imagen
echo “OK”
done

La opción -m 3 indica que quiero que se emplee interpolación bicúbica, y el resto simplemente indica el archivo de coordenadas, la imagen de origen y la imagen de destino (que luego machacará a la original). En mi ordenador de casa, un Centrino Duo a 2.2 GHz, tarda menos de un segundo en procesar un archivo del tamaño que he comentado antes. Y los resultados son impecables (y, efectivamente, ocupan menos que la imagen original):

Punto azul corregido

Si esto le ha servido a alguien para arreglar sus fotos, bien está.

6/5/2008

Vuelta al pingüino

Archivado en: Software libre, Geek World — Perpetrado por RinzeWind a las 7:00 am

Allá por el año 2000 (pudo ser un poco antes, o un poco más tarde), con la inestimable ayuda de galdecoa, montamos el que sería mi ordenador durante prácticamente toda la carrera, y que vio Windows en contadas ocasiones. En un principio llevó Mandrake, cuando todavía daba mis primeros pasos con Linux (y antes del horrible cambio de nombre), y más tarde, con un poco de experiencia ganada, Debian.

Ubuntu LogoEl verano pasado la tarjeta gráfica decidió que se iba a tomar un descanso. Siguió el mismo camino que el lector de CD y dos discos duros, que fueron convenientemente reemplazados. A esas alturas de la partida, no merecía la pena seguir poniendo parches en algo que se estaba cayendo a pedazos.

La defunción definitiva del antiguo ordenador coincidió con la adquisición de uno nuevo, un portátil, regalo de mi padre por terminar la carrera (por terminar de una puta vez, añado yo, que ya olía. Y re-añado: ¿quién dijo que una carrera universitaria no vale para nada?). Fue un Dell Latitude D830 (por si alguien tiene un modelo similar), y tras un breve tira y afloja con la comercial conseguí obtenerlo con Windows XP en lugar de la pesadilla de Vista. Adquirirlo con Linux, de momento, no era una posibilidad.

El caso es que, por vaguería, comodidad, o como quieran llamarlo, seguí con el Windows que tenía instalado. Total, los programas que utilizaba o sus sustitutivos estaban a tiro de piedra y seguían siendo software libre: Firefox y Thunderbird, Open Office, GIMP, Pidgin y otro puñado más que tenían versiones para el sistema de Redmond.

Sin embargo, seguía echando de menos mi vieja terminal, mis pequeñas chapuzas en Python y Perl, los varios escritorios (aunque sé que hay programas en Windows que ofrecen esa funcionalidad) y otro puñado de cosas que hacían que, simplemente, no fuese lo mismo. Fue un paso desde un equipo que me dejaba manosearlo hasta la náusea a otro que llevaba una filosofía de mira y no toques. Era incómodo.

La catarsis llegó el sábado por la mañana, cuando me sorprendí pasando el antivirus. Por si acaso, ya saben. ¿Me merecía la pena andar perdiendo el tiempo con esas chorradas cuando podía olvidarme de ese tipo de molestias? La respuesta estaba clara: me descargué la última versión de Ubuntu y la instalé, previa copia de todos los datos que eran importantes.

Me sentí hasta mal: todo funcionó a la primera. Recuerdo con lágrimas en los ojos cuando me compré la cámara de fotos que tengo ahora: tardé cuatro horas en echarla a andar y tuve que recompilar una versión nueva del kernel varias veces porque el que tenía no llevaba el soporte específico que me hacía falta. El sábado, tras veinte minutos escasos de instalación, arrancó una bonita interfaz gráfica en la que todo tiraba como debía. Y gratis. Y legal.

Si no le han pegado un tiento todavía, les recomiendo que lo hagan. La pueden probar sin necesidad de instalarla y a lo mejor descubren que, para todo lo que suelen hacer en casa, les basta y les sobra. Sólo hace falta paciencia para aprender.

17/1/2007

A tomar viento el Bad Behavior

Archivado en: Software libre, Geek World — Perpetrado por RinzeWind a las 9:01 pm

Cuando comenzó la última oleada de spam al blog (que a día de hoy aún no da signos de amainar) decidí buscar algo que complementase al filtrado de Akismet que, aunque era (y sigue siendo) bastante bueno, me dejaba una cantidad considerable de porquería a revisar si quería rescatar los mensajes legítimos clasificados erróneamente.

Encontré dos pequeños añadidos al WordPress que me ayudaban en esta tarea, en dos frentes diferenciados:

  • Bad Behavior es un conjunto de pequeños scripts en PHP que impiden que los robots automáticos puedan acceder al blog. Esto, por una parte, libraba al Akismet de una gran cantidad de porquería (haciendo caso a las estadísticas, le retiraba unos 9000 comentarios a la semana).
  • CDJ Spam Nuker es un pequeño plugin que permite listar, de una tacada, en una sola página, y agrupando aquellos comentarios en la cola de revisión que tienen el mismo texto, todos los mensajes que Akismet ha marcado como spam. La tarea de comprobación que antes duraba varios minutos (y navegar por varias páginas, pues el límite que el Akismet muestra por pantalla es de unos 50 mensajes - a ojo de buen cubero) ahora se hace en unos segundos.

Todo era maravilloso hasta que, recientemente, varias personas se me han quejado de que no han sido capaces de comentar. Aprovecho para recordar: es política de la casa no borrar ningún comentario y avisar cuando un artículo se edita, qué se ha editado y la causa de su edición. Me importa que el blog esté libre de basura en los comentarios pero me importa más que alguien que quiera comentar pueda hacerlo; porque aunque muchas veces no responda, me leo todos los comentarios.

Así que, confiando en que el CJD aguante, he decidido prescindir de Bad Behavior como sistema anti-spam en el blog: sabía que no era la mejor idea utilizar una técnica que simplemente prohíbe el acceso al blog, pero ahora lo tengo todavía más claro.

Y añado: si alguien ha intentado dejar un comentario recientemente y no ha podido, que pruebe ahora. Si el problema persiste, mi dirección de correo es de lo más evidente.

Technorati Tags: , ,

29/9/2006

La confabulación judeomasónica de la informática

Archivado en: Ida de Olla, Software libre, Geek World, Opinión — Perpetrado por RinzeWind a las 8:19 pm

A través de Escolar llego a Casos & Quejas, un blog de nuestros nunca suficientemente apreciados Liberales Desquiciados. Es una especie de página de denuncia que acepta envíos por correo electrónico, por lo que he podido ver. La última entrada es buenísima:

Más que una denuncia, lo que nos comenta Luis es un detalle jocoso: En la herramienta ofimática Microsoft Office 2003 - y en versiones anteriores- existe en el procesador de textos un corrector automático de palabras. Micrososft se asesora, creo, en la Real Academia de la Lengua Española. El caso que nos ocupa es que si se intenta escribir el apellido “Losantos” el corrector cambia automáticamente a “Lozanitos”… Curioso. ¿Tendrá algo que ver el insigne Académico Cebrián? No creo que sea casualidad, si escribimos “pp” el corrector nos señala que esa palabra está mal escrita y es un error, si escribimos “psoe” el programa corrige al “PSOE”. Yo, por mi parte, coreregiré la lista de cambios para que cuando ponga “psoe” me cambie a “PRISOE” y si pongo “zp” me cambie a “zETAp”.

Lo cual me recuerda a este otro caso que comenté cuando mi blog comenzaba a gatear: si se escribía javierarenas en el KMail de Mandrake 9.2 (ahora Mandriva), éste se cerraba automáticamente.

Aunque realmente a mí lo que me interesa saber es qué hoja de cálculo utilizan en el ayuntamiento de Ortigueira.

29/6/2006

Bloqueando spam en WordPress usando Apache

Archivado en: Software libre, Geek World — Perpetrado por RinzeWind a las 7:47 am

Hace un par de días mi blog sufrió una avalancha de spam. El plugin de Akismet los paró todos: 5000 en una noche. Por muy bueno que sea el sistema antispam que haya instalado, cada comentario ocasiona que se tenga que ejecutar el script en php. Si llegan varios comentarios por segundo, el sistema queda hecho una porquería por la elevada carga que le supone.

Resultó que esa avalancha de mensajes no estaba dirigida a esta dirección, sino a la antigua, de forma que me puse a buscar un método para bloquear todos los comentarios que no se originasen en este dominio: siempre que se produce un comentario en WordPress, la página de origen (el referer) debe ser la del artículo sobre el cual se comenta. Y así buscando encontré esta pequeña maravilla, que seguramente les será muy útil a aquellos que utilizan el mismo sistema de edición que yo. Simplemente hay que añadir en el directorio raíz del blog un archivo .htaccess (o editar uno que probablemente ya exista si utilizamos enlaces limpios) con el siguiente contenido:

<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*rinzewind.org.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
</IfModule>

Obviamente, habrá que sustituir rinzewind.org por el dominio del blog donde se piense utilizar esto. Mano de santo.

Technorati Tags: ,

1/6/2006

Publicado WordPress 2.0.3

Archivado en: Software libre, Geek World — Perpetrado por RinzeWind a las 8:48 pm

Para todos aquellos felices usuarios de este maravilloso CMS, avisar de que acaba de publicarse la versión 2.0.3, que mejora algunos aspectos relacionados con el rendimiento y arregla algunos fallos de seguridad, entre ellos el que mencioné el otro día. Acabo de actualizar mi blog y ha sido igual de sencillo que de costumbre. Si de repente peta algo, ya sabemos lo que es…

Technorati Tags: , ,

26/5/2006

Nueva vulnerabilidad en Wordpress

Archivado en: Software libre, Geek World — Perpetrado por RinzeWind a las 5:05 pm

Una anotación rápida antes de ponerme a estudiar: acabo de leer en Kriptópolis que acaba de aparecer una vulnerabilidad en WordPress, que aunque solamente es explotable si se tiene habilitado el registro de usuarios, cosa que he visto que es bastante poco común, a más de uno le puede ocasionar algún problemilla.

Más información en WordPress User Profile Handling Remote PHP Command Injection Vulnerability.

Siguiente página »

Gestionado con WordPress