martes, 16 de agosto de 2011

Sigo con mis prácticas. Ayer construí un sencillo sistema para «mover» de forma gradual la potencia entre tres dispositivos, en este caso tres leds, pero que sin mucho esfuerzo serviría para situar un puntero en un espacio circular para, por ejemplo, con un par de motorcillos y un lápiz dibujar curvas…. ¿se me ven ya las intenciones?

El cógido es básicamente la curva de un seno desplazada 90º para adelante y para atrás para cada uno de los leds laterales:

int pinPotenciometro = 0;
float valor;
void setup() {
}
void loop() {
valor = analogRead(pinPotenciometro);
float p1=sin(radians(((180.00/1024.00) * valor)+90))*255;
float p2=sin(radians(((180.00/1024.00) * valor)))*255;
float p3=sin(radians(((180.00/1024.00) * valor)-90))*255;
if(p1<0) p1=0;if(p1>255) p1=255;
if(p2<0) p2=0;if(p2>255) p2=255;
if(p3<0) p3=0;if(p3>255) p3=255;
analogWrite(11,p1);
analogWrite(10,p2);
analogWrite(9, p3);
delay(30);
}

El esquema lo podeis ver aqui

lunes, 25 de julio de 2011

Llevo unos días trabajando en la remodelación de las galerías de fotografía y vídeo del Cuaderno de campo. Sigo por aquí, mucho, aunque no se note en forma de apuntes.

Básicamente he clonado los contenidos de las cuentas de Flickr, Youtube y Blip.tv en una base de datos local y estoy activando un script que vigila y actualiza esta base de datos de acuerdo a los cambios que se produzcan en los servidores donde se alojan las fotos/vídeos. Entre otras cosas me permite mejorar los contenidos de las galerías de fotografía, vídeo y panorámicas, integrarlos mejor en el cuaderno, mejorar los resultados de las búsquedas y enlaces entre documentos, cachear resultados, producir RSS combinados de imagen/apuntes, un largo etcétera.

En fin, como siempre están ustedes invitados a darse una vuelta por las recién remodeladas galerías de Fotografía, Panorámicas y Vídeo, a usar la nueva navegación por etiquetas (debajo de cada elemento), buscar entre los apuntes e incluyendo (de nuevo) resultados de fotografías y vídeos, suscribirse a los Feed-Rss que ahora incluyen apuntes y cambios en la galería, compartir con más información y detalle gracias a las nuevas META cabeceras dirigidas a servicios como Facebook, GooglePlus, etc, etc etc….

Estamos de vuelta ya!

La nueva cámara fotográfica submarina de Merche, que prácticamente está ahora estrenando es una Canon Powershot s95 y como casi todas las cámaras digitales relativamente nuevas dispone de un modo de fotografía submarina. Básicamente este modo no consiste más que en aplicar a la captura un filtro rojo (anaranjado) que compense la ausencia de este espectro de la luz bajo el agua y suavize en cierta medida las dominantes azules propias de las filmaciones bajo el agua.

Evidentemente estos procesos automáticos tienen muchísimas limitaciones, las más inmediata es que se aplica el mismo proceso tanto a imágenes realizadas 3 metros bajo agua (provocando una dominante roja muy evidente) como a las imágenes tomadas a 33 metros (donde este tipo de filtrados es casi inútil). En un caso se pasa y en el otro no llega, pero en ese rango intermedio que va desde los 3 a los 20 mts si que puede lograr resultados aceptables.

La otra limitación no tan evidente y que descubrí montando el vídeo del otro día, es que la cámara solo aplica el modo submarino a fotografías fijas pero no a vídeos. Con lo cual en el momento de volcar la sesión de fotos del buceo te puedes encontrar fotografías y videos realizados en el mismo instante pero con tonos de color completamente dispares.

Para disimular esa diferencia y tratar de imitar sobre los vídeos el filtrado que la cámara aplica a las imágenes fijas saqué una linea de código que forma sencilla corrija las dominantes azules con ayuda de MLT (el background de Kdenlive que ya vimos hace tiempo)

La línea de MLT sería estamelt VIDEO.MOV -filter frei0r.coloradj_RGB R=1 B=0.7 G=0.8 "Keep luma"=1 Action=0.7 -filter frei0r.contrast0r Contrast=0.67Aplicamos un filtro de ajuste de color que reduce Azul (B) y Verde(G) manteniendo la luminosidad (Keep luma) y se lo aplicamos al 70%. Aplicamos también un ligero contraste.

El resultado sería este (izquierda: video original, derecha: procesado después de aplicar la linea superior)
Extra: Para realizar el montaje (video partido con filtrado y sin filtro) usé esta otra línea:
melt VIDEO.MOV -filter frei0r.coloradj_RGB R=1 B=0.7 G=0.8 "Keep luma"=1 Action=0.7 -filter frei0r.contrast0r Contrast=0.67 -track VIDEO.MOV -transition composite fill=1 -filter crop right=320 -consumer avformat:demo.avi b=4200k

miércoles, 8 de junio de 2011
Bandeja sistema

Combinando un par de comandos (posiblemente tengas que instalar ksystraycmd ) podemos fácilmente construir una acceso rápido que nos envíe la ventana de cualquier aplicación a la bandeja del sistema con un simple clic.

Abre el menú para crear accesos rápidos ( kcmshell4 khotkeys ) y crea Nuevo acceso rápido global > Orden/URL. Asigna una combinación de teclas a tu gusto y en la solapa de Acción escribe:
ksystraycmd --hidden --wid $(xwininfo | grep " Window id:" | awk '{print $4}')
Una vez creada la nueva combinación ejecútala, verás que el cursor cambia a un puntero en forma de cruz, cliquea sobre cualquier ventana deseada y esta será minimizada a la bandeja del sistema desde donde puedes ocultarla, desocultarla, desempotrarla (restaurar situación anterior) y salir.
Es muy cómodo para mantener en ejecución consolas con lecturas de log, escaneando, conexiones de vídeo, y en general cualquier aplicación que queramos consultar a intervalos

Un par de lineas que últimamente estoy añadiendo a los script que escribo en mi openSuse/KDE.

La idea es sencilla, puesto que muchos de estos script se ejecutan tanto desde una consola de texto como desde el menú de ejecución (ALT+F2) de KDE, lo correcto sería que dependiendo de la procedencia de esta llamada el script responda de una manera o de otra.
P.ejem: un script que devuelve la definición de una palabra después de consultar el diccionario online de la RAE, debería devolver el resultado en consola si fué llamado desde allí (incluso por otra aplicación) ó bien mostrar un cuadro de diálogo con el contenido si fué llamado desde el escritorio.

Salida dependiendo del contextoSalida dependiendo del contexto

El comando usado es tty que indica en que terminal estamos (/dev/pts/1) ó bien emite una advertencia del tipo: no es una consola. Pues listo, comprobamos si exite el /dev/pts/X en cuestión y caso negativo usamos kdialog:
#!/bin/sh
if [ -z $1 ];then exit 1; fi
if [ ! -f "/tmp/$1.tmp" ]; then
url="http://buscon.rae.es/draeI/SrvltGUIBusUsual?origen=RAE&LEMA="
user_agent="Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; es-ES)"
curl --silent --user-agent "$user_agent" "$url$1" | sed 's/]*>//gi' > "/tmp/$1.tmp"
fi
if [ -e $(tty) ]; then
#salida por consola tras formatearlo con LYNX
lynx -dump -force-html -hiddenlinks=ignore -nolist "/tmp/$1.tmp"
else
#salida a diálogo de KDE
/usr/bin/kdialog --textbox "/tmp/$1.tmp" 400 300 --title "RAE: $1"
fi

Voilá.

Nota: En el caso de la salida por consola formateamos el texto descargado (que llega en formato HTML) con ayuda de LYNX. En el caso de usar Kdialog simplemente usamos el diálogo textbox que admite un html básico.

sábado, 14 de mayo de 2011

Un sencillo script que me hice ayer jugando la base de datos de Digikam4.
El splashscreen (de Digikam4 en este caso) es esa pantallita (normalmente una foto decorada) que aparece en el momento de lanzar la aplicación y mientras se cargan las librerias y plugins. Como en muchos otros programas es personalizable. Basta con poner una imagen PNG en ~/.kde4/share/apps/digikam/data/splash-digikam.png para que al iniciar el programa se use nuestra imagen en lugar de la que trae el programa. Ya hace tiempo colgué por aquí algunos ejemplos propios para Digikam/KDE3.

¿Y porqué no hacerlo dinámico? Una imagen diferente cada vez que se cargue Digikam, por ejemplo: El splash-screen será la última fotografía modificada cuyo RATING (el número de estrellitas,1-5, con que valoramos cada foto) sera superior a 2 (por ejem). Eso es lo que hacen las siguientes líneas.
Copialas en un archivo de texto, guardalas como ~/bin/splashd.sh y personalizalas:
#!/bin/bash
#nombre del archivo de la base de datos de Digikam4 (comprueba)
fileDB="digikam4.db"
#ruta absoluta al archivo anterior (cambialo)
pathDB="/home/album/Fotografia"
baseDatos="$pathDB/$fileDB"
#ruta de usuario (introduce tu username)
dirDestino="/home/tu-user/.kde4/share/apps/digikam"
#obtiene nombre de imagen y album de la última imagen modificada y cuyo rating se superior a 2
id=$(sqlite3 -list $baseDatos "SELECT b.album, b.name FROM imageinformation AS a INNER JOIN images AS b ON a.imageid=b.id WHERE a.rating<6 AND b.name LIKE '%.jpg' ORDER BY b.modificationDate DESC LIMIT 1")
#con lo anterior obtenemos el album en que se encuentra
foto=$(sqlite3 -list $baseDatos "SELECT a.relativePath,b.specificPath FROM albums AS a INNER JOIN albumroots AS b ON a.albumRoot=b.id WHERE a.id=${id/|*/} LIMIT 1")
#la ruta absoluta a la imagen es
fotografia=$(echo "$pathDB|$id|$foto" | awk -F "|" '{print $1""$4"/"$3}')
#a partir de la imagen seleccionada generamos el splashscreen
convert "$fotografia" -resize 500x -format PNG png:- | composite -gravity south "$dirDestino/over.png" - "$dirDestino/data/splash-digikam.png"

A continuación reemplazamos el binario de Digikam por otro script:sudo
mv /usr/bin/digikam /usr/bin/digikam-bin

En su lugar (/usr/bin/digikam) ponemos un script que diga:#!/bin/bash
digikam-bin $@ && sh /home/tu-user/bin/splashd.sh

Solo necesitais eso y el PNG que se superpone a vuestra fotografía con la decoración de Digikam ( descargar over.png . Guardalo en tu ~/.kde4/share/apps/digikam/over.png ). En adelante al salir de Digikam se genera el splashscreen tal y como veis en la fotografía de arriba y que será el que veais en el siguiente inicio de Digikam.

Actualización

He hecho un par de modificaciones en las lineas del script superior. Tal y como está ahora esas lineas toman la última foto modificada cuya puntuación sea menor de 6 (es decir, la última modificada entre todas puesto que la máxima puntuación es 5) y además que sea un JPG. Esto lo he incorporado porque el script falla si la última imagen es un vídeo ó un RAW

Cuaderno de campo es un blog desarrollado y mantenido por Trebol-a y en el que escriben Trebol-a, Miguel, Merche y Mónica
Si quieres saber algo más sobre los autores acude a la página acerca-de, si quieres contactar con alguno de nosotros hazlo a través de contactar ó de Google+

Creative Commons: Todo el contenido de la web (imágenes, textos, vídeos, a excepción de aquellas obras de otros autores enlazados por Cuaderno de Campo) se acoge a los términos expresados en la licencia Creative Commons