Latest entries
Convertir imágenes RAW en JPG de forma autmática
18 August 2011
Cuando hay una gran cantidad de fotos es un latazo tener que convertir una a una de forma manual. Para ello podemos utilizar ufraw-batch. Lo podemos instalar con lo siguiente:
# apt-get install ufraw-batch
Una vez instalada, basta con abrir una terminal, ir al directorio donde están las fotos y ejecutar:
$ ufraw-batch --out-type=jpeg *.CR2
En mi caso, las imágenes RAW tienen extensión CR2, formato que utiliza Canon. Cada cuál puede indicar su formato.
Edición de imágenes RAW en Gimp: cdraw y ufraw
18 August 2011
Hoy he necesitado convertir una imagen RAW a JPG, por lo que he estado evaluando brevemente los plugins que hay disponibles para Gimp. Que yo haya encontrado, hay dos plugins: cdraw y ufraw.
Iniciar una Activity desde un servicio en Android
17 August 2011
Para poder crear una activida, es necesario un contexto. Un servicio se ejecuta en segundo plano y no hace uso de un contexto. Por ello, es necesario utilizar el contexto de la aplicación:
Intent dialogIntent = new Intent(getBaseContext(), MainActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(dialogIntent);
Cómo utilizar codificación UTF-8 en Latex
17 August 2011
Es tan simple como añadir al inicio del documento la siguiente línea:
\usepackage[utf8]{inputenc}
En caso de de tener otra codificación, como por ejemplo:
\usepackage[latin9]{inputenc}
bastará con sustituirla por utf8.
Analizar los parámetros de consulta de URL en Python
11 August 2011
>>> from urlparse import urlparse
>>> url = urlparse('http://www.google.com/search?client=ubuntu&channel=fs&q=python')
>>> params = dict([part.split('=') for part in url[4].split('&')])
>>> params
{'channel': 'fs', 'client': 'ubuntu', 'q': 'python'}
Android: Alert Dialogs + Threads = The application has stopped unexpectedly
5 August 2011
Estoy retomando la programación Android en estos días y he encontrado algún que otro problema al trabajar con hebras. Durante la creación de una Activity necesito hacer una petición a un WebService. Para ello he creado un ProgressBar y he lanzado una hebra que se encarga de ejectuar la petición. Una vez la petición ha finalizado, si ha ocurrido algún error, quiero mostrar un AlertDialog.
Respetar múltiples líneas con echo
3 August 2011
En ocasiones es útil recoger en una variable el resultado de un comando para procesarlo posteriormente (la salida de cat, grep, ...) y a la misma vez queremos mostrar ese contenido por pantalla con echo. El problema es que éste comando no respeta los saltos de líneas. Veamos un ejemplo:
$ ntpdate=`grep ntpdate /var/log/syslog`
$ echo $ntpdate
Aug 3 14:18:28 tx2500-Natty ntpdate[5233]: adjust time server 91.189.94.4 offset 0.015003 sec Aug 3 14:20:10 tx2500-Natty ntpdate[5323]: adjust time
server 91.189.94.4 offset -0.007577 sec Aug 3 14:20:57 tx2500-Natty ntpdate[5401]: adjust time server 91.189.94.4 offset 0.004040 sec Aug 3 14:22:18
tx2500-Natty ntpdate[5479]: adjust time server 91.189.94.4 offset -0.002003 sec Aug 3 14:29:58 tx2500-Natty ntpdate[5670]: adjust time server
91.189.94.4 offset 0.001987 sec Aug 3 14:31:46 tx2500-Natty ntpdate[5746]: adjust time server 91.189.94.4 offset -0.001275 sec Aug 3 15:26:02
tx2500-Natty ntpdate[6593]: adjust time server 91.189.94.4 offset -0.286619 sec Aug 3 15:26:25 tx2500-Natty ntpdate[6639]: adjust time server
91.189.94.4 offset -0.278193 sec Aug 3 15:41:25 tx2500-Natty ntpdate[6751]: adjust time server 91.189.94.4 offset 0.066937 sec Aug 3 15:49:57
tx2500-Natty ntpdate[6824]: adjust time server 91.189.94.4 offset -0.032212 sec
Para evitar esto basta con utilizar "dobles comillas":
$ echo "$ntpdate"
Aug 3 14:18:28 tx2500-Natty ntpdate[5233]: adjust time server 91.189.94.4 offset 0.015003 sec
Aug 3 14:20:10 tx2500-Natty ntpdate[5323]: adjust time server 91.189.94.4 offset -0.007577 sec
Aug 3 14:20:57 tx2500-Natty ntpdate[5401]: adjust time server 91.189.94.4 offset 0.004040 sec
Aug 3 14:22:18 tx2500-Natty ntpdate[5479]: adjust time server 91.189.94.4 offset -0.002003 sec
Aug 3 14:29:58 tx2500-Natty ntpdate[5670]: adjust time server 91.189.94.4 offset 0.001987 sec
Aug 3 14:31:46 tx2500-Natty ntpdate[5746]: adjust time server 91.189.94.4 offset -0.001275 sec
Aug 3 15:26:02 tx2500-Natty ntpdate[6593]: adjust time server 91.189.94.4 offset -0.286619 sec
Aug 3 15:26:25 tx2500-Natty ntpdate[6639]: adjust time server 91.189.94.4 offset -0.278193 sec
Aug 3 15:41:25 tx2500-Natty ntpdate[6751]: adjust time server 91.189.94.4 offset 0.066937 sec
Aug 3 15:49:57 tx2500-Natty ntpdate[6824]: adjust time server 91.189.94.4 offset -0.032212 sec
Comprobar ataques DOS en routers NetGear WNDR3300
3 August 2011
Hace unos días estuve revisando la configuración de un router NetGear WNDR3300 debido a un mal funcionamiento. La causa resultó ser una serie de ataques DOS que se estaban realizando al router. Estos ataques se estaban realizando desde la propia red local, así que decidí hacerme un script para detectarlos lo antes posibles.
LOG_FILENAME=router.log
USER=admin
PASS=password
IP=192.168.1.1
LOGURL=FW_log.htm
curl -s http://$USER:$PASS@$IP/$LOGURL | grep '^\[.*[0-9]$' > $LOG_FILENAME
attacks="`grep -i 'DOS' $LOG_FILENAME`"
if [ attacks != "" ] ; then
echo "$attacks"
# Esta parte no es necesaria, a no ser que se quiera
# hacer un tratamiento especial para cada IP de forma
# independiente, cómo averiguar la dirección MAC
ips=`grep -i 'DOS' $LOG_FILENAME | cut -f7 -d' ' | cut -f1 -d','`
for ip in $ips
do
echo "Hacer algo con esta $ip"
done
fi
Aquí podemos ver un ejemplo de la salida del script:
[DOS attack: STORM] attack packets in last 20 sec from ip [172.16.0.13], Sunday, Jul 24,2011 21:16:57
[DOS attack: STORM] attack packets in last 20 sec from ip [172.16.0.5], Sunday, Jul 24,2011 21:54:10
[DOS attack: STORM] attack packets in last 20 sec from ip [172.16.0.5], Sunday, Jul 24,2011 21:54:46
[DoS Attack: ACK Scan] from source: 50.99.45.xx, port 64976, Friday, July 29,2011 01:16:26
[DoS Attack: RST Scan] from source: 108.49.85.xx, port 56258, Friday, July 29,2011 01:16:21
Espero que sea de utilidad para alguien :)
Breves: Mi ausencia en el blog
15 July 2011
Llevo algunos meses sin escribir nada y es que no he tenido tiempo. Entre la carrera, el proyecto de fin de carrera y el trabajo no he podido ni respirar. Intentaré que esto cambie durante el mes de Agosto, que estaré dedicado al proyecto de fin de carrera, incluida la documentación.
Instalando Android SDK en Debian 6
17 May 2011
Estos días voy a empezar a programar Android en el trabajo, así que voy a explicar cómo configurar un entorno de trabajo para Android, sobre Debian y Eclipse.
Cómo instalar MediaWiki dentro de un sitio Django con Apache2
4 May 2011
La idea es bastante sencilla. Disponemos de un sitio web en el que vamos a añadir MediaWiki en /wiki/. Así, por ejemplo, si nuestro dominio es http://www.plagaos.com/, en el cuál hay un proyecto Django en despliegue, vamos a tener http://www.plagaos.com/wiki/ sin que afecte al sitio. Además, MediaWiki hará uso de PostgreSQL.
Instalando Pencil en Ubuntu 11.04 de 64 bits
2 May 2011
Pencil es un plugin de Firefox para prototipado de interfaces gráficas. El problema es que no funciona aún con Firefox 4.0, así que he decidido utilizarlo en modo Standalone, es decir, de forma independiente al navegador web.
Lo primero que vamos a hacer es descargar el .tar.gz desde la página oficial y descomprimirlo. Abrimos una terminal y vamos al directorio. Aquí encontraremos un binario de 32 bits, del cual vamos a pasar.
Simplemente necesitamos instalar xulrunner:
$ sudo apt-get install xulrunner-1.9.2
Y ahora lo lanzamos:
$ xulrunner application.ini
Probando Contiki en Debian Squeeze
2 May 2011
Durante estos días, en el trabajo, estamos buscando un sistema operativo para sistemas empotrados que se adapte bien a nuestras necesidades. A lo largo de los próximos días iré contando acerca de las experiencias con Contiki. Este sistema operativo es un proyecto relativamente joven, con buen soporte para algunos dispositivos de radio que estamos barajando y listo para rodar IPv6.
Flatpages en Django 1.3: cómo saber la página activa
30 April 2011
Flatpages es una aplicación disponible en contrib que nos permite crear páginas planas en HTML. Si no necesitamos algo complicado y queremos añadir páginas estáticas a nuestro sitio, esta es nuestra aplicación.
En Django 1.3 han añadido un template tag para realizar un listado de las páginas. Aquí podemos ver el ejemplo disponible en la página oficial:
{% load flatpages %}
{% get_flatpages as flatpages %}
<ul>
{% for page in flatpages %}
<li><a href="{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</ul>
Pero si con este listado queremos hacer un menú, siempre es interesante destacar la página en la que estemos situados.
Soporte para JPEG, Zlib y FreeType2 en PIL
26 April 2011
Hace unos días escribía como Compilar PIL dentro de VirtualEnv, pero realicé la compilación sin soporte para JPEG, Zlib o FreeType2. Ahora mismo estaba probando un script y me he encontrado el siguiente error:
ImportError: The _imagingft C module is not installed
Este error se debe a que no hay soporte para FreeType2. Revisando el directorio de instalación (donde están los fuentes) me he econtrado con lo siguiente:
--------------------------------------------------------------------
PIL 1.1.7 SETUP SUMMARY
--------------------------------------------------------------------
version 1.1.7
platform linux2 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2]
--------------------------------------------------------------------
*** TKINTER support not available
*** JPEG support not available
*** ZLIB (PNG/ZIP) support not available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------
Al final he optado por la solución más sencilla. Instalarlo en el sistema y utilizarlo dentro de VirtualEnv. Para ello:
$ cd /path/to/virtualenv
$ ln -s /usr/lib/python2.7/dist-packages/PIL/ lib/python2.7/site-packages/
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.

