dic'11
21

MATLAB, como no podía ser de otra manera, es una herramienta muy útil para el desarrollo ágil de algoritmos, probarlos y así, cuando nos decidamos a pasarlos a un lenguaje distinto que nos permita su mejor explotación, estemos seguros de que va a funcionar, que no hemos implementado funciones que realmente no nos hacían falta y que no vamos a dar demasiados pasos en falso.

Nosotros, los que estudiamos Ingeniería de Telecomunicaciones, estamos bastante acostumbrados a trabajar con MATLAB pero, al menos en mi caso, siempre me había visto tratando señales de audio o de radiación, nunca imágenes o vídeos. Pero ayer, en un intento de hacer algo diferente (mostrar la evolución de una imagen conforme se va comprimiendo), se me ocurrió la idea de mostrar cada una de las imágenes obtenidas por mi algoritmo como un frame de vídeo en una película.

Tras investigar un poco, puedo decir que crear un vídeo *.avi usando MATLAB, es de lo más sencillo, es más, sólo tenemos que escribir cuatro líneas (aunque usa podrá repetirse tantas veces como frames tengamos en nuestro vídeo).

Paso 1

Creamos una variable en la que insertaremos los distintos frames:

movie = avifile('video.avi', 'fps', 10, 'compression', 'none');

Esta función tiene la siguiente especificación:

aviobj = avifile(filename, ParameterName, ParameterValue)

Es decir, le tenemos que pasar el nombre del fichero y tantas parejas parámetro->valor como deseemos; en nuestro caso hemos especificado que queremos mostrar 10 frames por segundo y que no queremos compresión alguna en nuestro vídeo resultante.

Paso 2

Añadimos todos los frames que deseemos, para ello antes debemos convertir la imagen que queremos que aparezca en el vídeo en un frame; en definitiva:

frame = im2frame(image, gray(256));
movie = addframe(movie, frame);

Si tienes dudas sobre lo que hacen estas funciones puedes consultar las especificaciones de im2frame y de addframe.

Paso 3

Cerramos las variables y, por consiguiente dejamos el video listo para reproducirse en programas como el videolán:

movie = close(movie);
Si disfrutaste del artículo, puedes suscríbete a nuestro feed RSS
Categoría(s): Manuales, MATLAB
nov'11
15

Recientemente adquirí un MacBook Pro 13″, tras 4 meses de uso, puedo decir con tranquilidad que es una maravilla de equipo; pero como todo cambio de sistema operativo, programas, equipo,… implica una serie de cambios a los que debemos acostumbrarnos poco a poco.

En este caso voy a comentar una solución al problema (o característica, según se vea) que nos impide seleccionar la url en Google Chrome al pulsar la techa F6 (o fn+F6) y al que nos permite refrescar/actualizar la página pulsando la tecla F5 (o fn+F5).

Realmente configurarlo para añadir esta característica es muy sencillo; para ello nos vamos a las preferencias del sistema>teclado; una vez ahí nos dirigimos a la pestaña “Atajos del teclado” ya que vamos a añadir 2. Antes de seguir con la configuración vamos a apuntar dos nombres de comandos tal y como aparecen en el menú de Chrome y que vamos a necesitar a la hora de definir nuestro atajo:

En el menú File (Archivo) del Chrome vemos que el comando que se corresponde con la techa ⌘L (Seleccionar la dirección)  es “Open Location…” en mi caso; esto debería hacer que al pulsar la combinación ⌘L, la URL se seleccione automáticamente (obtenga el foco); pues bien, nos apuntamos el nombre del comando “Open Location…” ya que lo necesitaremos más adelante.

Hacemos lo mismo pero con el comando ⌘R que está bajo el menú View (Ver), solo que en este caso con “Reload This Page“.

Leer más… »

Si disfrutaste del artículo, puedes suscríbete a nuestro feed RSS
Etiqueta(s): , ,
Categoría(s): General, Manuales, OSX
jul'11
6

Hace unas semanas publicamos una lista con 10 aplicaciones gratuitas recomendadas para iPad, pues bien, como es lógico, con el tiempo se van descubriendo nuevas aplicaciones que le darán una especial vidilla a nuestro nuevo equipo táctil.

10 de las aplicaciones de este artículo siguen siendo las del anterior, por lo que no vamos a volver a nombrarlas y describirlas, pero puedes verlas fácilmente dirigiéndote a dicho artículo.

Como dice el título del artículo, vamos a hablar de las 10 aplicaciones que nos faltan de una forma un poco más exhaustiva. Algunas de las aplicaciones que se describirán requerirán un proceso especial de instalación o bien, para poder disfrutarla al 100% habrá que hacerse con la versión de pago; pero si están aquí, es que ya merecen la pena sin haber pagado un duro.

Y sin más dilación, comencemos:

FeedlerRss: Una de mis herramientas favoritas de Internet y que relativamente poca gente usa o que ni siquiera sabe que existe, son los lectores de RSS. Esta herramientas, para los no enterados del tema, nos permite leer todas las actualizaciones de nuestras páginas favoritas, siempre y cuando den soporte a este sistema. Este tipo de lectores existen desde hace varios años, tanto como programas de escritorio o como otra página web que nos muestra el contenido de las demás; algunos ejemplos son: Google Reader, Netvibes, o el que estoy haciendo y pretendo publicar dentro de relativamente poco tiempo. Pues bien, en caso de que tengamos una cuenta de Google Reader, podremos vincular ésta con la aplicación Feedler, de manera que podremos leer cómodamente nuestro feed RSS desde nuestro iPad sin contar con las limitaciones de las aplicaciones web para dispositivos móviles. Como única pega, diría que abusa de las animaciones por todas partes.

Leer más… »

Si disfrutaste del artículo, puedes suscríbete a nuestro feed RSS
Etiqueta(s):
Categoría(s): Programas
jun'11
29

En los últimos artículos sobre las Macros en C/C++ hemos explicado de una forma un tanto rápida todo el potencial que presenta esta herramienta si sabemos utilizarla con un nivel medio-alto en determinadas situaciones.

Uno de los problemas que se nos presentan en ocasiones a la hora de trabajar en un lenguaje como C es que, a pesar de que contamos con depuradores de código, no siempre tenemos uno a mano, por lo que si a la vez que documentamos podemos mostrar a nuestro capricho y en función de la situación un log de lo que está sucediendo durante su ejecución, podremos hacernos una idea bastante aproximada de si todo va bien o no.

Tras esta pequeña reflexión me lanzo a compartir con vosotros un pequeño fichero .h que nos facilitará enormemente la tarea en una 20 líneas y que he utilizado ya en el desarrollo de varios programas:


#include <stdio.h>
//#define DEBUG 0
#define DEBUG 1
#ifndef __LOG_H
#define __LOG_H
 #if DEBUG == 1
 #define log(format, args...) \
		fprintf (stderr, "%s - %i: ", __FILE__, __LINE__);\
		fprintf (stderr, format "\n", ##args);
 #define warning(format, args...) \
			log("/!\\ "format" /!\\", ##args)
#define error(format, args...) \
		log("(X) "format" (X)", ##args)
 #else
#define log(format, args...) ;
#define warning(format, args...) ;
#define error(format, args...) ;
 #endif
#endif

Este fichero tendremos que incluirlo en nuestro programa escrito en C mediante una directiva #include:

#include "log.h"

en este caso he llamado al fichero que contiene esas 20 líneas de código.

De manera que si tenemos declarado DEBUG con un valor de 0 no se mostrará salida alguna y no sólo eso, sino que las líneas desaparecerán (es un claro ejemplo de uso de macros, ya que en nuestro programa en producción puede que deseemos tener más velocidad de procesado y no nos interese interactuar con salidas ni llamar a funciones que no hagan nada), mientras que si tiene un valor de 1, escupirá toda la información que deseemos por, en este caso, la salida de error de nuestro programa.

Si ejecutamos el siguiente programa en C:


#include "log.h"
int main(int argc, char** argv){

log("asdf%i", 1)

log("asdf")

warning("esto es una alerta")

warning("esto es una alerta%i", 1)

error("esto es un error")

error("esto es un error%i", 1)

}

obtendremos la siguiente salida:

bottle.c – 4: asdf1

bottle.c – 5: asdf

bottle.c – 6: /!\ esto es una alerta /!\

bottle.c – 7: /!\ esto es una alerta1 /!\

bottle.c – 8: (X) esto es un error (X)

bottle.c – 9: (X) esto es un error1 (X)

La ausencia de puntos y coma después de llamar las macros no es un error, es que simplemente no hacen falta.

Finalmente y a modo aclaratorio, las constantes utilizadas en el fichero log.h __FILE__ y __LINE__ son dos directivas de preprocesador que nos indican en qué lína y fichero de código tenemos la llamada a ese log.

Si disfrutaste del artículo, puedes suscríbete a nuestro feed RSS
Categoría(s): C/C++, Producción propia, Programación