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");

M.A.R.S. – Desarrollo movido a un repo privado.

M.A.R.S. se está sincornizando con un repo privado situado en el sitio donde trabajo. Intentaré sincronizar gna cada X tiempo. Ahora mismo me es imposible sincronizar a diario o semanalmente … puesto que no es automágico.

Deftones – Diamond Eyes

Deftones han sacado nuevo disco. Lo he bajao y disfrutado ya… y lo compraré cuando llegue a alguna tienda, física o no.

El single es este… TREMENDO. Con ustedes, interpretando Rocket Skates, deftones…

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

Censura + Ramoncín = OMG WTF BBQ

La inciclopedia sucumbe a la presión de Ramoncín (TM). Esta página ha sido retirada de su Wiki.

La web "censurada"

Descargar Imagen Ramoncín(TM) Inciclopedia

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.

Coloreando el prompt :)

Esta es mi configuración para el prompt de bash:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# ANSI color codes
RS="\[\033[0m\]"    # reset
HC="\[\033[1m\]"    # hicolor
UL="\[\033[4m\]"    # underline
INV="\[\033[7m\]"   # inverse background and foreground
FBLK="\[\033[30m\]" # foreground black
FRED="\[\033[31m\]" # foreground red
FGRN="\[\033[32m\]" # foreground green
FYEL="\[\033[33m\]" # foreground yellow
FBLE="\[\033[34m\]" # foreground blue
FMAG="\[\033[35m\]" # foreground magenta
FCYN="\[\033[36m\]" # foreground cyan
FWHT="\[\033[37m\]" # foreground white
BBLK="\[\033[40m\]" # background black
BRED="\[\033[41m\]" # background red
BGRN="\[\033[42m\]" # background green
BYEL="\[\033[43m\]" # background yellow
BBLE="\[\033[44m\]" # background blue
BMAG="\[\033[45m\]" # background magenta
BCYN="\[\033[46m\]" # background cyan
BWHT="\[\033[47m\]" # background white
 
export PS1="$HC$FGRN\u$FRED@$FGRN\h$FWHT[\t]$FGRN$UL\w$RS$HC$ $RS"

y como root:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# ANSI color codes
RS="\[\033[0m\]"    # reset
HC="\[\033[1m\]"    # hicolor
UL="\[\033[4m\]"    # underline
INV="\[\033[7m\]"   # inverse background and foreground
FBLK="\[\033[30m\]" # foreground black
FRED="\[\033[31m\]" # foreground red
FGRN="\[\033[32m\]" # foreground green
FYEL="\[\033[33m\]" # foreground yellow
FBLE="\[\033[34m\]" # foreground blue
FMAG="\[\033[35m\]" # foreground magenta
FCYN="\[\033[36m\]" # foreground cyan
FWHT="\[\033[37m\]" # foreground white
BBLK="\[\033[40m\]" # background black
BRED="\[\033[41m\]" # background red
BGRN="\[\033[42m\]" # background green
BYEL="\[\033[43m\]" # background yellow
BBLE="\[\033[44m\]" # background blue
BMAG="\[\033[45m\]" # background magenta
BCYN="\[\033[46m\]" # background cyan
BWHT="\[\033[47m\]" # background white
 
export PS1="$HC$FRED\u$FGRN@$FRED\h$FWHT[\t]$FRED$UL\w$RS$HC[$FRED""ROOT$FWHT""] # $RS"