/var/log/jynus

/var/log/jynus

Blog personal de Jynus

/var/log/jynus RSS Feed
 
 
 
 

Gráficas circulares SQL

Este es el segundo post de creación de gráficos con SQL de Shlomi Noach. Puedes leer también el original en inglés en su blog y mi post anterior.

Abajo se muestra una gráfica circular generada mediante (una única consulta) SQL. Recorreré los pasos para producirla, y concluiré con, espero que estén de acuerdo conmigo, algunos ejemplos útiles para el mundo real.

+----------------------------------------------------------------------+
| pie_chart                                                            |
+----------------------------------------------------------------------+
|                                                                      |
|                         ;;;;;;;;;;;;;;;;;;;;;                        |
|                  oooooooo;;;;;;;;;;;;;;;;;;;;;;;;;;;                 |
|             oooooooooooooo;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;            |
|          ooooooooooooooooo                 ;;;;;;;;;;;;#####         |
|        oooooooooooooo                           ;#############       |
|       oooooooooooo                                 ############      |
|      oooooooooooo                                   ############     |
|      ooooooooooo                                     ###########     |
|      oooooooooooo                                   ::::::::::::     |
|       oooooooooooo                                 ::::::::::::      |
|        ooooooooo:::::                           ::::::::::::::       |
|          o::::::::::::::::                 :::::::::::::::::         |
|             :::::::::::::::::::::::::::::::::::::::::::::            |
|                  :::::::::::::::::::::::::::::::::::                 |
|                         :::::::::::::::::::::                        |
|                                                                      |
| ##  red: 1 (10%)                                                     |
| ;;  blue: 2 (20%)                                                    |
| oo  orange: 3 (30%)                                                  |
| ::  white: 4 (40%)                                                   |
+----------------------------------------------------------------------+

More »

Facebook Twitter Menéame Delicious LinkedIn Google

Dibujos SQL

Shlomi Noach es también un Instructor, desarrollador y DBA Certificado de MySQL, que vive en Israel. Le he pedido permiso para traducir al español algunas de sus entradas acerca de maneras creativas de usar SQL que leí a través del Planet MySQL. Éste es el primer post de la serie. Podéis leer la entrada original en inglés en su blog.

SQL no está pensado para generar gráficos, por supuesto, pero veo algunos casos en los que generar salidas no tabulares puede ser útil, tal y como mostraré en futuras entradas.

Me gustaría explicar los fundamentos del funcionamiento de los gráficos SQL: de hecho, es posible hacer todo lo que quieras.  ¿Cómo? More »

Facebook Twitter Menéame Delicious LinkedIn Google

MySQL y los dichosos “encodings”

Si no tenemos cuidado, podemos encontrarnos con una desagradable sorpresa en forma de caracteres extraños.

Si no tenemos cuidado, podemos encontrarnos con una desagradable sorpresa en forma de caracteres extraños.

Cualquier persona que comienza a manejar una base de datos suele encontrarse con problemas a la hora de manejar literales de cadena. Si no se pone el debido cuidado, podemos encontrarnos con errores causados por la utilización o conversión de codificaciones de caracteres. Intentaremos dar una pequeña guía para aclarar cómo manejar los distintos ‘encodings’ y ‘collations’ en una base de datos MySQL.

More »

Facebook Twitter Menéame Delicious LinkedIn Google

Geolocalizando WIFIs

Hoy es, según la ONU, el “Día Mundial de las Telecomunicaciones y de la Sociedad de la Información”, aka “El día de Internet” aunque, por las noticias que aparecen últimamente en los medios, dudo que haya algo que celebrar.

Pero, ¿cuál es la penetración real de Internet en tu barrio? A partir de un comentario que hizo Golo en la barbacoa del sábado sobre geolocalización a partir de redes WIFI, se me ha ocurrido probar un programa llamado Kismet. He salido esta tarde a dar un paseo cargado con mi AsusEEE y la antena GPS, ambos encendidos, y he dado unas vueltas por un parque cercano.

El resultado de este pequeño experimento es el siguiente:

Mapa Wireless

Mapa Wireless

Cada círculo de color corresponde a la posición aproximada de un “Access Point” o router wifi, y el tamaño del mismo es su cobertura calculada. Para construirlo, se han registrado varias lecturas de intensidad de las redes (algo completamente legal, ya que se trata de un rango de frecuencias no regulado) y se han renderizado sobre un mapa de OpenStreetMap. En total se han detectado casi 300 redes WIFI (sólo algunas de ellas se han podido representar), y eso que sólo di una vuelta a la manzana. Si a alguien le interesa el proceso, puedo escribir un nuevo post explicando cómo lo he hecho, con más detalle.

Luego la respuesta es que sí, parece que, pese a tener la banda ancha más cara de Europa, ésta ha llegado al hogar de manera considerable.

Facebook Twitter Menéame Delicious LinkedIn Google

Navegando con GPS y OSM

Con ganas de sacarle partido al EeePC que me compré hace unas semanas, y previendo que voy a tener que viajar bastante durante este año, me he dedicado a buscar una manera de tener un navegador GPS gratuito y legal para este cacharro.

Google Maps no está mal, pero tiene los siguientes inconvenientes:

  1. Sus términos de uso prohíben explícitamente estas prácticas
  2. Los datos de Teleatlas (usados por el callejero de Google) dan mucha penita a veces (mirad dónde han puesto la Alameda Cervantes, en Soria, o la pinta que tiene la Plaza del Pilar de Zaragoza). Además, se centran mucho en información útil para automóviles y poco o nada en peatones y bicicletas
  3. Sólo ofrecen públicamente imágenes (“tiles”) de los mapas, no los datos originales vectoriales. Eso hace imposible el crear rutas sin estar conectado a internet.

Así que decidí probar Navit, un programa de navegación GPS libre que permite utilizar los datos de OpenStreetMap para mostar mapas y calcular rutas. Aunque está todavía en desarrollo y hay cosas que no funcionan muy bien, tiene todo lo que yo quería: mostrar mapas vectoriales, buscar direcciones y calcular rutas.

Primer paso: descargar e instalar el programa. En Debian es muy fácil, ya que existe un repositorio:

# navit repository
deb http://navit.latouche.info/debian lenny main

Que simplemente tenmos que añadir a nuestro /etc/apt/sources.list, seguido del clásico:

$ sudo aptitude update
$ sudo aptitude install navit

Paso 2: conectar el GPS Buetooth al EeePC. Es necesario activar el Bluetooth desde la BIOS (todavía no he encontrado la manera de desactivarlo/activarlo desde el sistema operativo). También necesitaremos tener instaladas las utilidades para gestionar el GPS y la conexión inalámbrica, principalmente bluez-utils y gpsd. Después, emparejaremos la antena bluetooth a nuestro dispositivo y finalmente configuraremos el demonio de GPS para que utilice esta señal:

$ sudo aptitude install gpsd bluez-utils # instalacion de paquetes
$ sudo hcitool dev # permite ver los dispositivos BT
Devices:
        hci0    00:11:22:33:44:55
$ sudo hciconfig hci0 up # levanta el interfaz bluetooth
$ sudo hcitool scan # permite ver los dispositivos al alcance
Scanning ...
        00:99:88:77:66:55       BT GPS # <- este es el GPS

Editamos el archivo /etc/bluetooth/rfcomm.conf y lo rellenamos con la dirección hardware que hemos obtenido en el paso anterior:

#
# RFCOMM configuration file.
#

rfcomm0 {
        # Automatically bind the device at startup
        bind no;

        # Bluetooth address of the device
        device 00:99:88:77:66:55;

        # RFCOMM channel for the connection
        channel 1;

        # Description of the connection
        comment "Antena GPS Bluetooth";
}

Lo vinculamos:

$ sudo rfcomm bind rfcomm0

Y ahora lo configuramos para que lo reconozca gpsd, ejecutando:

$ sudo dpkg-reconfigure gpsd

Y escribiendo /dev/rfcomm0 cuando pregunte por el dispositivo.
Podemos comprobar que funciona así:

$ telnet localhost 2947
r # escribir r + intro
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,132515.936,V,XXXXX,N,XXXXXX,W,0.00,0.00,060309,,,N*6C
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32
$GPRMC,132515.936,V,XXXXX,N,XXXXXX,W,0.00,0.00,060309,,,N*6C
$GPGSV,1,1,01,23,,,19*71
[...]

Paso 3: descargar los mapas y programa

Por alguna razón, ejecutar navit sin configurar antes GPS y mapas hace que este falle. Los mapas que utiliza navit (.bin) pueden obtenerse a partir de archivos de datos de  OpenStreetMap (.osm) -existe una utilidad online que lo hace automáticamente- o bien descargarse directamente ya convertidos al formato binario de Navit desde sitios como Cloudmade. Yo he optado por esto último y he bajado el archivo spain.navit.bin.zip (que tiene todos los datos de España), lo he descomprimido y lo he guardado en la memoria flash del EEE.

Por último, he editado el archivo /etc/navit/navit.xml para que lo use:

<!-- Mapset template for openstreetmaps -->
<mapset enabled="yes">
    <map type="binfile" enabled="yes" data="/home/jynus/osm/spain.navit.bin"/>
</mapset>

¡Y ya está! Ejecutamos navit y estas son algunas de las capturas de pantalla que he obtenido navegando por Zaragoza:

De Tenor Fleta a Sagasta

De Tenor Fleta a Sagasta

Navegando por la Plaza Paraíso

Navegando por la Plaza Paraíso

Facebook Twitter Menéame Delicious LinkedIn Google

“sudo” con una redirección de la salida

Si alguna vez habéis  intentado redireccionar la salida de un comando a un lugar que requiere privilegios de superusuario para escritura, os habréis topado con el siguiente error:

$ sudo echo test > /etc/deleteme
bash: /etc/deleteme: Permiso denegado

¿Cómo? ¿Pero sudo no proporciona privilegios de superusuario cuando se ejecutan comandos?

Sí, pero es necesario comprender bien el funcionamiento de una shell para ver lo que está pasando: sudo trata (salvo opciones) todo lo que viene a continuación como un comando; sin embargo es el programa intérprete de órdenes (bash o aquél que estemos ejecutando en ese momento) el que gestiona previamente las redirecciones de las salidas y entradas como ">", "2>", "<" o "|". Debemos, por tanto, evitar que nuestra shell las trate antes de ejecutar el sudo.

Por supuesto,  hacer un sudo su[-c], nos libraría de estos problemas, pero no es nada elegante y le quita toda la razón de ser a utilizar sudo. Para evitarlo tenemos varias opciones:

$ sudo sh -c 'echo "test" > /etc/deleteme'
$ echo test | sudo tee /etc/deleteme
test

(Éste último permite, adicionalmente, escribir al fichero y visualizar la salida simultáneamente).

¿Alguien sugiere más maneras?

Facebook Twitter Menéame Delicious LinkedIn Google

Resumen de la Mapping Party de Soria

Acabo de llegar de casa después de pasar el fin de semana en Soria[*]. Se había realizado una quedada en esta localidad de los llamados “OSMeros” o “mappers” de España, es decir, los voluntarios que participamos en el proyecto colaborativo OpenStreetMap.

Dibujo inspirado en OSM. Creative Commons (¿?). Autor: Constantin Litvak

Dibujo inspirado en OSM. Creative Commons (¿?). Autor: Constantin Litvak

¿Qué es OpenStreetMap?

Para los que no lo conozcan, el proyecto OSM es algo así como la Wikipedia de los mapas. Se trata de una iniciativa colaborativa a través de internet para recoger, crear y difundir información geográfica libre. En España se empezó relativamente poco a generar mapas (los ingleses y alemanes nos llevan mucha ventaja), pero aún así puede echarse un vistazo a lo que se lleva ya hecho en la página www.openstreetmap.org. Mucha gente se pregunta qué sentido tiene hacer algo que ya está disponible gratuitamente en Google Maps. La razón es que, pese a ser gratis, ese tipo de servicios ponen trabas a la forma en que puedes usar la información geográfica (no puedes, por ejemplo, modificar las imágenes para arreglar errores). Como se suele decir: Free as in freedom, not as in free beer.

¿Qué es lo que se pretendía hacer en Soria?

El generar datos para crear el plano de todo el mundo (entre nosotros, informalmente, “mapear”) no es una actividad que se haga siempre en solitario. De vez en cuando, se queda en un determinado lugar para socializar, y de paso completar un hueco que falte en los datos. Aprovechando que se celebran los dos años aproximadamente desde las primeras iniciativas de OSM en España, se decidió quedar en Soria y hacer una “mapping party” nacional (el año pasado fue en Zaragoza).

Además, y como gran novedad, se ha aprovechado que hemos confluido algunos de los voluntarios más activos para crear una asociación (con el “original” nombre de “OpenStreetMap España”), federada de la fundación internacional que ya existe, con el ánimo de que se transforme en un ente oficial para ayudar al proyecto a conseguir sus objetivos (contactar con instituciones públicas, coordinación, etc.).

¿Qué es lo que finalmente se ha hecho?

Se han firmado los estatutos y elegido los cargos (¡Iván for president! :-P ), se han hablado de los próximos objetivos (¡trunks are red! ;-) ). Se ha socializado alrededor de unas cuantas cervezas. E, incluso, ha habido tiempo para hacer un poco de mapping. Lo cierto es que no había mucho que hacer en Soria. Y es que desde que se propuso el lugar hasta esta semana muchos otros contribuidores ya habían dibujado buena parte de las calles y carreteras de la ciudad castellano-leonesa. La buena (y mala) noticia es que el mapa nunca está completo, por lo que siempre hay cosas que añadir y que mejorar en el mapa.

Celso ha escrito un resumen detallado de las actividades que llevamos a cabo durante estos tres días.

Por último, animaros desde aquí, si estáis interesados, a conocer más cosas sobre el proyecto pasándoos por el wiki o la lista de correo.

[*] Desde que lo escribí hasta que lo publiqué, han pasado ya dos días

Facebook Twitter Menéame Delicious LinkedIn Google

Ya soy Warper!

Logo de Warp Networks S.L.

Logo de Warp Networks S.L.

Empecé el martes, y ya se puede decir oficialmente que soy un Warper de pleno derecho. La empresa, creada inicialmente por varios ex-compañeros de la carrera, se dedica principalmente al desarrollo de proyectos de software relacionados con tecnologías “Open Source”. Actualmente ha crecido hasta convertirse en uno de los referentes aragoneses y españoles en nuevas tecnologías, teniendo como clientes administraciones públicas y empresas privadas tanto a nivel nacional como internacional.

En concreto, yo no trabajaré en el departamento de ingeniería, sino en el de formación, como instructor MySQL. Y es que Warp Networks S.L. es uno de los dos únicos partnes españoles de formación MySQL.

De momento, la experiencia está siendo muy positiva, sobre todo por el buen rollo que se respira dentro de la oficina, principalmente por el trato con mis compañeros. He descubierto que la profesionalidad  con que se trabaja (y todos mis compañeros son grandes profesionales) no está reñida con un trato desenfadado.

Tú quizá todavía estés a tiempo de convertirte también en un Warper

Facebook Twitter Menéame Delicious LinkedIn Google

Creando “servicemenus” en KDE4

Supongamos que tenemos que realizar una tarea repetitiva varias veces en un escritorio Linux/KDE4. Para facilitarnos la vida, creamos un script en Bash para automatizar todo el proceso. Por ejemplo, el siguiente script automatiza, mediante la utilidad convert de ImageMagick, la transformación de una o varias imágenes al formato JPG y con un tamaño y calidad dadas:

jynus@clonmel2:~> cat ~/bin/resize.sh
#!/bin/sh
SIZE=1280
QUALITY=90

for FILE in "$@"; do
   convert "$FILE" -quality $QUALITY -resize 1280x1280\> \
"`dirname "$FILE"`/${SIZE}px-`basename "${FILE%.[^.]*}"`.jpg"
done

Sin embargo, podemos facilitarnos la vida aún más añadiendo esta utilidad a los menús contextuales en Konqueror y Dolphin, que aparecen al pulsar con el botón derecho > submenú acciones, para hacer más accesible la ejecución de ciertas tareas sobre determinados tipos de archivo. Para ello debemos crear una nueva entrada en los denominados “ServiceMenus”. Es relativamente fácil: para definir una nueva acción, tenemos que generar un archivo de extensión .desktop en el directorio ServiceMenus que se encuentrará en:

/usr/share/kde4/services/ (para todos los usuarios)
~/.kde4/share/kde4/services/ (sólo para el usuario actual)

El lugar exacto puede variar ligeramente entre distribuciones (ejecutar kde4-config --path services para averiguar el lugar exacto). Si dicho directorio no existe, lo cual ocurrirá el caso de utilizar el directorio de usuario, tendremos que crearlo nosotros mismos.
Este archivo tendrá la siguiente pinta (se pueden definir más de una acción por archivo), que explicaré poco a poco:

jynus@clonmel2:~> cat /usr/share/kde4/services/ServiceMenus/resize.desktop
[Desktop Entry]
Encoding=UTF-8
ServiceTypes=KonqPopupMenu/Plugin,image/*
Type=Service
Actions=resizeImages;
TryExec=convert

[Desktop Action resizeImages]
Name=Redimensionar
Icon=image-jpeg
Exec=/home/jynus/bin/resize.sh %F

“ServiceTypes=” define sobre qué tipo de archivos vamos a poder realizar la acción (tipo mime). Por ejemplo, para vídeos sería video/*; para vídeos en formato avi, video/x-msvideo, etc. Para casos especiales como “todos los archivos UNIX” (incluido dispositivos, pipes, etc.), sería all/all, para los archivos “normales”, all/allfiles y para los directorios, inode/directory.
Actions=marca, separados por punto y coma, los nombres de las acciones que definiremos a continuación. En este caso sólo definiremos una, denominada resizeImages.
En la definición de la acción, le asignaremos un nombre (que será el que aparezca en el menú contextual), un icono ver los disponibles en /usr/share/icons/default.kde4/*/actions/ y el comando que finalmente se ejecutará. En esta orden, podremos indicar mediante %f o %F, respectivamente, el archivo o conjunto de varios archivos (si el comando acepta varios parámetros) sobre los cuales se aplica esta función. En nuestro caso, tan sólo llamamos al script que mostrábamos antes para obtener el resultado final:

Servicemenus

Servicemenus

Facebook Twitter Menéame Delicious LinkedIn Google

Grabar CDs y DVDs desde línea de comandos

Es posible que alguna vez necesitemos grabar un CD o DVD desde la línea de comandos. Por ejemplo, si alguna vez habéis estropeado irremediablemente el sistema de ficheros y sólo podéis iniciar sesión en modo consola, pero necesitáis grabar un CD de vuestra distro favorita (como me ocurrió a mí). O bien habéis ideado un sistema de copias de seguridad que automatiza cada cierto tiempo la grabación a medios ópticos, pero queréis evitar pesados programas gráficos.

A más de uno le sonará, aunque sólo sea por su aparición en los logs de programas gráficos como K3B o GnomeBaker, las utilidades cdrecord o growisofs, las cuales aparecen en la mayoría de guías similares a ésta. Lo que muchos quizá no sepáis es que estas utilidades han sido sustituidas por varios forks, aunque afortunadamente de parámetros similares y funcionalidades superiores (además, suele venir instalado paquetes de compatibilidad que crean enlaces simbólicos desde las antiguas nomenclaturas):

jynus@clonmel2:~> ls -la `which cdrecord`
lrwxrwxrwx 1 root root 5 dic 16 20:24 /usr/bin/cdrecord -> wodim

Empecemos: los paquetes necesarios, que suelen estar preinstalados por defecto por las distribuciones son:

wodim genisoimage icedax

Mediante el comando siguiente comando veremos cuáles son los dispositivos de grabación disponibles (olvidaros del anticuado -scanbus y la utilización de ids SCSI):

jynus@clonmel2:~> wodim --devices
wodim: Overview of accessible drives (1 found) :
-------------------------------------------------------------------------
 0  dev='/dev/scd0'     rwrw-- : 'HL-DT-ST' 'DVD-ROM GDRH20N'
-------------------------------------------------------------------------

Generar una imagen iso:

jynus@clonmel2:~> genisoimage -l -R -J -o nombre_de_la_imagen.iso /ruta/a/grabar

Con estos parámetros por defecto, seguirá enlaces simbólicos y generará extensiones Rockridge y Jouliet, lo cual permite relajar las restricciones restricciones en cuanto a nombres de archivo y directorios en sistemas que permiten nombres largos, como Windows y Linux.

Puede probarse la imagen generada antes de ser grabada haciendo:

jynus@clonmel2:~> sudo mount -o loop nombre_de_la_imagen.iso /mnt

Grabar la imagen generada:

jynus@clonmel2:~> wodim -v -eject dev=/dev/scd0 nombre_de_la_imagen.iso

Detectará automáticamente la velocidad más adecuada para grabar el CD, aunque podemos forzar una velocidad con el parámetro -speed=16, por ejemplo

Ambos comandos (generación de imagen y grabación de CD) pueden, por supuesto, concatenarse para hacer la grabación “al vuelo”):

jynus@clonmel2:~> genisoimage -l -R -J -o nombre_de_la_imagen.iso /ruta/a/grabar \
| wodim -v -eject dev=/dev/scd0 -

Borrar un medio regrabable:

jynus@clonmel2:~> wodim -v dev=/dev/scd0 blank=fast

Copiar un disco:

jynus@clonmel2:~> dd if=/dev/cdrom of=nombre_de_la_imagen.iso
jynus@clonmel2:~> wodim -v -eject dev=/dev/scd0 nombre_de_la_imagen.iso

Extraer las pistas y grabar un disco de audio:

jynus@clonmel2:~> icedax -B -D /dev/cdrom -L 1
jynus@clonmel2:~> wodim -v -eject dev=/dev/scd0 -audio audio_*.wav
Facebook Twitter Menéame Delicious LinkedIn Google