Programación

ColladaDOM 1.4 en debian SID (64 bits)

Descarga: collada_debian_amd64.tar.bz2

Instalación (con permisos de root):

1
2
3
cd /usr/local
tar xvfj- <path>/collada_debian_amd64.tar.bz2
ldconfig

** nota: “path” es donde hayas bajado el archivo anterior.

Dependencias para MARS:

1
aptitude install libpcre++-dev libpcre++0 libpcre3-dev libpcre3 libboost-filesystem-dev libtinyxml-dev

Suerte.

Collada DOM Locales BUG

Collada DOM is buggy, we all know, but this bug makes it unusable. Collada team is not handling locale info, so non C-compatible locale users won’t be able to use float point numbers. While C locale uses floating point numbers like “1.43″, spanish locale uses “1,43″.

One quick workaround is setting the C locale inside your code.

Use this beforce using your dae class:

1
setlocale (LC_NUMERIC, "C");

ColladaDOM 1.4 deb packages i386

Thanks, Cleto!

libcolladadom14_2.2-1_i386.deb
libcolladadom14-dev_2.2-1_i386.deb

These have no support for ZAE and are built with tinyxml instead of libxml(2).

Depends on:

1
aptitude install libpcre++-dev libpcre++0 libpcre3-dev libpcre3 libboost-filesystem-dev libtinyxml-dev

Compiling, add to LDFLAGS:

-lpcre -lpcrecpp -lboost_filesystem -lminizip -lcollada14dom




Spanish Note:

Estos paquetes contienen lo mismo que hay en este post, pero con dependencias y demás historias. Así no hace falta descargar el .tar.gz


ColladaDOM 1.4 en debian SID (32 bits)

¿Quieres paquetes debian? ¡Pasa de este post y mira aquí!
debian debs ColladaDOM 1.4 i386.


He tenido problemas utilizando colladadom en alguna máquina de 32 bits por culpa de libxml2 (o hasta ahí he llegado). Mientras que tras compilar con soporte de libxml2 en amd64 no he tenido ningún problema, al hacer lo mismo en 32 bits obtenía lo siguiente:

Error: Dosument is Empty

Así que he construido colladadom 1.4 (sin soporte ZAE, que a mi no me hace falta) contra tinyxml, en vez de libxml2 (por defecto en gnu/linux).

Adjunto el archivo que hay que descomprimir en /usr/local para poder usar ColladaDOM en Debian SID (a día 8 de Abril de 2010).

Para compilar, añadimos a las LDFLAGS del Makefile:

-lpcre -lpcrecpp -lboost_filesystem -lminizip -lcollada14dom

libminizip está en el tar.gz que os dejo, pero las demás dependencias las deberéis resolver de forma manual, esto es …

1
aptitude install libpcre++-dev libpcre++0 libpcre3-dev libpcre3 libboost-filesystem-dev libtinyxml-dev

Y eso es todo…
Happy Hacking!

Download: colladadom_sid_32bits-8April2010.tar.gz

ssh+svn en Gna.org

Para hacer cambios en los repositorios de gna (svn commit, por ejemplo) hace falta que creemos un par clave pública/clave privada rsa para la autenticación.

Para ello, lo primero que tenemos que hacer es generar nuestra clave:

1
ssh-keygen -t rsa

ES IMPORTANTE QUE USEMOS UNA PASSPHRASE. ESTA PASSPHRASE SE USARÁ COMO CONTRASEÑA DE LA CLAVE, Y POR LO TANTO EN EL ACCESO AL REPOSITORIO

De este modo, se crea un par de claves en $(home)/.ssh/ :

  • id_rsa – Clave privada (ojo, esta no se comparte jamás)
  • id_rsa.pub – Clave pública

Si imprimimos el contenido de la clave pública:

1
2
brue@doped[12:38:11]~/.ssh$ cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqkoTVAWxq7/6TwSZVBHQSnWoAhUSlPNJaDIQ6qXjz/wDfb3VfLo7aN7T3v5QA/DpiHvsNYFbVU4+32FSh57pxUYdflgPeLTWM3414ZT7i8h4EC7sOGV9GRvvRgFtnd5LJLZXtGZPyEjal8bBzjSytMi69cojwsRXHeoR9H8gLvEXU8r37zyIS8WDg2Hi5+7tPr1OdfBS71+pL+j97bK4E7D9FWXg4FPK7Plin99Uwf1z3XvW2j+G/3xjUu/tGEhO5eLAjAOYcL3Y2OjJPdLmnfVnzAC8hgI75h2Lm1pSzq7hfCLOWuM7XL/M9DBTlN5eNJlqnEJcoQ8tESbQT7lsiQ== brue@doped

La clave pública es:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqkoTVAWxq7/6TwSZVBHQSnWoA.....lsiQ== brue@doped

esto es, empieza con “ssh-rsa” y termina con “usuario@maquina” (que no es más que una descripción de la misma).

Si vamos a la web de configuración de nuestra cuenta en gna nos aparecerán las opciones asociadas a la misma. En esta ocasión nos interesa la edición de las claves SSH.

Si seleccionamos esa edición de claves, podremos introducir la nuestra (¡¡¡LA PÚBLICA!!!) como se muestra en la imagen siguiente:

En el ejemplo anterior se ven tres claves. Esto se debe a que yo tengo introducidas (atención, obviedad) tres claves: la de casa, la del trabajo y la del portátil.

Tras esto, debemos esperar a que gna actualice la bese de datos de las claves, que se realiza a través de una tarea de cron, cada tres horas (o eso dicen ellos). Así, como mucho deberíamos esperar 3 horas. Si a las 3 horas la clave no funciona, o bien hemos hecho algo mal, o algo falla con los servidores de gna (en mi caso pasó lo segundo y casi me vuelvo loco).

Para probar nuestra clave, bajaremos la rama trunk del repo del proyecto en el que estemos autorizados del siguiente modo:

1
svn co svn+ssh://<login_gna>@svn.gna.org/svn/<proyecto>/trunk <proyecto>

En mi caso, con M.A.R.S. he de escribir lo siguiente para bajar la rama trunk:

svn co svn+ssh://brue@svn.gna.org/svn/mars/trunk mars

Recordad que si perdéis las claves no pasa nada (mientras las “revoquéis”). Simplemente la borráis de gna y creáis una nueva siguiente desde cero el proceso

Y eso es todo.

Happy hacking!

Pausando un hilo (posix pthread) unos milisegundos.

A menudo hace falta para la ejecución de un hilo ya que no queremos que consuma todo el tiempo de CPU, cuando, por ejemplo, hacemos un polling agresivo. Hay que tener en cuenta que sleep() no funciona puesto que para el proceso completamente.

Una posible solución es utilizar la siguiente función:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <sys/time.h>
#include <pthread.h>
...
int VideoSource::threadWait(int milliseconds){
	pthread_mutex_t mutex;
        pthread_cond_t condition;
 
        struct timespec timewaited;
        struct timeval now;
 
        if(pthread_mutex_init(&mutex,NULL))
        	return -1;
 
        if(pthread_cond_init(&condition,NULL))
        	return -1;
 
        gettimeofday(&amp;now, NULL);
 
        timewaited.tv_sec = now.tv_sec + milliseconds / 1000;
        timewaited.tv_nsec = now.tv_usec*1000 + (milliseconds % 1000)*1000000;
 
        return pthread_cond_timedwait(&condition, &mutex, &timewaited);
}

Ten en cuenta que los sistemas operativos no suelen ser de tiempo real y que además, en hacer los cálculos antes de la espera, se pierda un tiempo … pero bueno, puede ser útil para algunas cosas que no requieran precisión a nivel de ciclos.

Eclipse en Debian SID

Para remediar el problema de la conexión TCP, basta con ejecutar:

1
2
sudo sed -i 's/net.ipv6.bindv6only\ =\ 1/net.ipv6.bindv6only\ =\ 0/' \
/etc/sysctl.d/bindv6only.conf && sudo invoke-rc.d procps restart

y para arrancarlo de forma que el bug con GTK no nos afecte, usaremos un script como este:

1
2
3
#!/bin/sh
export GDK_NATIVE_WINDOWS=true
/opt/eclipse/eclipse -vmargs -Duser.name="Nombre del programador"

Compilando OpenCV 2 en Debian.

Lo primero que hay que hacer es instalar los paquetes necesarios, suponiendo que ya tenéis las herramientas básicas para compilar c y c++ (gcc y g++)

1
aptitude install libgtk2.0-dev libdc1394-22-dev libavcodec-dev libavdevice-dev libavformat-dev libavc1394-dev libavfilter-dev libgstreamer0.10-dev libxinerama-dev libxine-dev libunicap2-dev libunicapgtk2-dev libswscale-dev libgstreamer-plugins-base0.10-dev libbz2-dev subversion

y después…

1
2
3
4
5
6
7
svn co https://code.ros.org/svn/opencv/trunk
cd trunk/opencv
mkdir release
cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..
make
sudo make install