Latest entries

Convertir imágenes RAW en JPG de forma autmática

written by uve

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.

Full entry >>

Edición de imágenes RAW en Gimp: cdraw y ufraw

written by uve

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.

Full entry >>

Iniciar una Activity desde un servicio en Android

written by uve

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);

Full entry >>

Cómo utilizar codificación UTF-8 en Latex

written by uve

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.

 

Full entry >>

Analizar los parámetros de consulta de URL en Python

written by uve

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'}

Full entry >>

Android: Alert Dialogs + Threads = The application has stopped unexpectedly

written by uve

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.

Full entry >>

Respetar múltiples líneas con echo

written by uve

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

Full entry >>

Comprobar ataques DOS en routers NetGear WNDR3300

written by uve

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 :)

Full entry >>

Breves: Mi ausencia en el blog

written by uve

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.

Full entry >>

Instalando Android SDK en Debian 6

written by uve

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.

Full entry >>

Cómo instalar MediaWiki dentro de un sitio Django con Apache2

written by uve

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.

Full entry >>

Instalando Pencil en Ubuntu 11.04 de 64 bits

written by uve

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

Full entry >>

Probando Contiki en Debian Squeeze

written by uve

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.

Full entry >>

Flatpages en Django 1.3: cómo saber la página activa

written by uve

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.

Full entry >>

Soporte para JPEG, Zlib y FreeType2 en PIL

written by uve

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/

Full entry >>

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é.