Skipping blocking libav functions with interruption callbacks

Viernes, 24 de agosto de 2012 2 comentarios

Introduction

In this post, we are going to see how to write interruption callbacks for the blocking functions of the libav library. This feature seems to be available in older versions of the library, but we are going to detail the necessary steps for the branch 0.8.x.

Note that the solutions could be different for older branches of the library such as 0.6.x

Leer más…

GD Star Rating
loading...
Share
Categories: Programación Tags: , ,

Image processing with CUDA (Comparison with CPU, MMX, SSE & OpenCV)

Miércoles, 15 de agosto de 2012 Sin comentarios

CUDA Logo

En esta entrada se presenta un ejemplo de como realizar procesamiento de imágenes con CUDA, y se compara el rendimiento de una aplicación sencilla para invertir los colores de una imagen, implementada con las siguientes tecnologías y/o librerías:

  • Instrucciones aritméticas con CPU.
  • Librería OpenCV.
  • Instrucciones aritméticas usando tecnología SIMD (MMX y SSE).
  • CUDA C runtime.
  • NPP (Nvidia Performance Primitives). [librería proporcionada con el toolkit de CUDA]

Leer más…

GD Star Rating
loading...
Share
Categories: Programación Tags: , , , , , , , ,

Creación de repositorios GIT para usuarios de svn

Sábado, 31 de diciembre de 2011 2 comentarios

Llevaba mucho tiempo queriendo cambiar todos mis repositorios personales se SVN a GIT, pero no he encontrado tiempo libre para hacerlo hasta ahora. La principal ventaja que me ofrece Git frente a Svn, desde mi humilde punto de vista de usuario, es la posibilidad de hacer rápidos commits en local sin tener que comunicarte con el servidor. Esto nos hará evitarnos esa molesta espera de unos segundillos cuando hacemos los commits, y además fomentará el que hagamos commits más habitualmente y podamos crear una traza más elaborada de los cambios que vamos realizando en cada revisión del repositorio.

Como en muchas otras entradas del blog, esto solo pretende ser una “receta paso-a-paso”. Los detalles podréis buscarlos en la buena documentación que tiene git (recomendado instalar paquete git-doc) o en alguno de los libros o PDFs que dejaré en la sección de enlaces.

Creación del repositorio

Estando en el servidor donde publicaremos nuestro repositorio, nos situamos en la carpeta del proyecto donde está el contenido del mismo y escribimos:

$ git init

Con lo que se creará el directorio .git. Posteriormente añadimos el contenido del proyecto a la historia del repositorio con

$ git add .

Y hacemos el commit

$ git commit -m "Initial version of repository"

Ahora viene el punto crítico con el que más me he tenido que pelear. Una vez dados los pasos anteriores podemos clonar el repositorio desde un equipo cliente, trabajar en local  y luego enviar los cambios realizados por medios de parches al mantenedor del repositorio para que el los aplique en el servidor. Sin embargo, no podemos hacer “push” de los cambios realizados sobre este servidor. Para poder hacer esto hay que crear en el servidor un clon “bare” del repositorio que acabamos de crear:

$ git clone --bare my-repo

Lo que creará un directorio my-repo.git que  será del cual tengamos que clonar desde el lado del cliente para después poder hacer “push” de los cambios que acabamos.

 Clonar, hacer cambios y subirlos al servidor

Desde el lado del cliente clonamos el repositorio bare

$ git clone ruta-a-repo/my-repo.git

Hacemos los cambios necesarios al código y los añadimos con git add. Es importante resaltar que aunque un fichero esté ya añadido al repositorio, si hacemos cambios sobre él, tendremos que indicarlo con git add, para que esos cambios se materialicen en el próximo commit. Para ver que ficheros han sufrido cambios y cuales se harán efectivos en el próximo commit se recomienda usar git status. Y una forma rápida de añadir todos los cambios realizados en ficheros ya añadidos al repositorio es con git add -u.

Una vez indicados todos los cambios, hacemos el commit:

$ git commit -m "Changes XXX"

Podemos hacer tantos commits en local como nos parezca sin tener que establecer comunicación con el servidor. Una vez que queramos subir los cambios realizados al servidor simplemente escribimos

$ git push

Enlaces

Hay multitud de documentación sobre git en la red, pero quizás baste con coger un buen libro y leerlo tranquilamente para conocer algunos de los entresijos de este sistema de archivos distribuido. Aquí podéis encontrar multitud de enlaces a diferentes tipo de contenido. A mi en concreto me ha servido de mucho leerme el libro “Git Internals”, que es un libro breve y conciso. En este otro enlace se muestra un contenido mi parecido al de esta entrada, pero en inglés.

GD Star Rating
loading...
Share
Categories: Internet Tags: ,

Kernel bug unmounting disks

Martes, 20 de septiembre de 2011 Sin comentarios

Actualización 20/11/2011

He estado varios días observando un extraño suceso en mis equipos, los cuales tienen la última versión estable de Debian instalada (Squeeze). Al conectar un disco duro externo con partición NTFS este se monta automáticamente de forma correcta y puedo trabajar con él perfectamente. El problema viene a la hora de desconectarlo. Estando en el escritorio, si pulso con el botón derecho sobre la unidad y selecciono la opción “Expulsar unidad de forma segura” el equipo se bloquea completamente sin responder a los eventos de teclado o ratón. Leer más…

GD Star Rating
loading...
Share
Categories: Debian, Hardware Tags: , , , ,

Bit flags in C/C++

Sábado, 20 de agosto de 2011 1 comentario

Siempre me ha parecido muy útil el paso de parámetros por medio de banderas de bits (más conocidas como bit flags). En muchas de las librerías que he ido manejando estos últimos años he observado que es muy común pasar opciones, a por ejemplo una función, mediante un argumento de tipo int (32 bits) y de esta forma poder pasar un número de opciones igual al número de bits empleados por el tipo de dato. A continuación es dejo un ejemplo muy sencillo para que veáis como se suele utilizar los bits flags en C/C++. Leer más…

GD Star Rating
loading...
Share