Archive for Marzo 2008

audiosum 0.2

Ok, audiosum ha sido un excelente conejillo de indias para aprender Git, GNU Autoconf y GNU Automake. Los dos últimos me parecen demasiado confusos todavía, pero ahí la llevo.

Y se han hecho varios cambios, principalmente:

  • Se corrigió un horrible bug donde los archivos que se abrían no se cerraban, tipo memory leak, pero de descriptores.
  • Se añadió una opción, -b, para indicar que sólo se desea la firma de una parte del archivo (dado en porcentaje). Si se usa -b sin un valor, imprime sólo el tamaño del audio del archivo.
  • Se añadió una opción, -a, para indicar qué algoritmo de hash usar, como md5, sha1, etc.
  • Mejores mensajes de ayuda.
  • Se incluye audiodup, un script para encontrar duplicados más cómodamente.

El script audiodup trabaja de manera eficiente:

  1. Genera una lista de archivos a analizar, según las rutas indicadas.
  2. (Primera etapa) Descarta los archivos no duplicados según su tamaño.
  3. (Segunda etapa) Descarta los archivos no duplicados según el primer 2% del contenido.
  4. (Tercera etapa) Descarta los archivos no duplicados según el contenido completo.
  5. Los archivos restantes son duplicados. Se agrupan y se presentan.

Ejemplo de uso de audiodup, para buscar mp3 duplicados en $HOME y /mnt/music:

audiodup $HOME /mnt/music

Ejemplo de uso de audiodup, usando sha1 y que revise el 5% en la segunda etapa:

audiodup -a sha1 -b 5 $HOME /mnt/music

Descarga en .tar.gz: audiosum-0.2.tar.gz

Video favorito: Teaching kids to code

Ants demo on GreenfootTeaching kids to code (enseñando a los niños a codificar) es una conferencia en inglés donde se muestar el uso de la plataforma Greenfoot para motivar a los niños a aprender a programar.

Esta conferencia es de Michael Kölling, de la Universidad de Kent en Inglaterra, cortesía de las Google Tech Talks.

¿Funcionaría en México? Michael Kölling mencionó que en Inglaterra, la única materia obligatoria sobre computación en el sistema educativo inglés es la ITC, donde básicamente les dan Office, y lo más cercano a lo que llegan en cuanto a programación, es la preparación de algunos macros. Estamos en igualdad de condiciones, así que no veo por qué no pudiera funcionar aquí.

audiosum 0.1

Me complace anunciar formalmente la liberación de audiosum 0.1.

Audiosum es una herramienta que permite calcular la firma MD5 para un archivo MP3, pero ignorando la metainformación (etiquetas ID3v1, ID3v2, Lyrics3v1 y Lyrics3v2). En este momento no existe soporte para OGG.

Audiosum surge de la idea de buscar duplicados de audio cuando los archivos difieren únicamente en sus etiquetas. Por ejemplo, en el siguiente ejemplo, existen cuatro archivos cuya firma MD5 es diferente, por lo que son diferentes. Sin embargo, su parte de audio es idéntica. Cuando audiosum muestra la firma MD5 del audio, uniq los detecta por lo que tranquilamente podemos borrar una de las copias de estos archivos.

alvarezp@alvarezp-laptop:~$ md5sum (algunos archivos)
d662def56360c1ba71975fe0858651df  other/music/ALEX UBAGO - QUE PIDES TU.mp3
4e91970580b0355b3aa7e711416d50ba  other/music/Alex Ubago.- Vuelve.mp3
07894b351ae9df4a3c8ca487169e1524  DCIM/iPod_Control/Music/F00/ASFP.mp3
82db5ed3ffe951aba19cdd2d38cbea01  other/music/no doubt - bath water.mp3

alvarezp@alvarezp-laptop:~$ find -iname "*.mp3" | audiosum | sort | uniq -D -w 41
003c6b41 36d2a24f44413f4a4ab3282e7cea1649 [I3v1] [I3v2] [----] [----] ./other/music/ALEX UBAGO - QUE PIDES TU.mp3
003c6b41 36d2a24f44413f4a4ab3282e7cea1649 [I3v1] [----] [----] [----] ./other/music/Alex Ubago.- Vuelve.mp3
0058f7a4 17df577141ae1db6384309e2e3cbe2c6 [I3v1] [I3v2] [----] [----] ./DCIM/iPod_Control/Music/F00/ASFP.mp3
0058f7a4 17df577141ae1db6384309e2e3cbe2c6 [I3v1] [----] [----] [----] ./other/music/no doubt - bath water.mp3

El primer valor que se imprime es el tamaño del audio procesado. El segundo valor es la firma MD5.

Obsérvese cómo a audiosum no se le proveen los archivos por la línea de comando sino por la entrada estándar. Se puede incluir tee audiosum.out antes de sort para que las firmas se almacenen en un archivo de texto antes de ser ordenadas. El comando uniq -D -w 41 es el que se encarga de dejar únicamente los duplicados, considerando los primeros 41 caracteres.

Descarga en .tar.gz: audiosum-0.1.tar.gz

Para compilar:

#Instalar la librería mhash.
apt-get install libmhash-dev #para Ubuntu

#Descargar el archivo audiosum-0.1.tar.gz.
wget http://alvarezp.ods.org/blog/files/audiosum-0.1.tar.gz

#Descomprimir el paquete.
tar xvzf audiosum-0.1.tar.gz
cd audiosum-0.1

#Configurar y crear
./configure && make

#Instalar
sudo make install

Ejemplos de uso de audiosum:

find -iname "*.mp3" | audiosum
find -iname "*.mp3" | audiosum > audiosum.out
find -iname "*.mp3" | audiosum | tee audiosum.out
find -iname "*.mp3" | audiosum | sort | uniq -D -w 41

Saludos.

strvcat & strvcpy

#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

/* Just like strcat(), but allows multiple strings
 * on the same line.
 */
char *strvcat(char * s1, char * args, ...) {
	va_list ap;

	va_start(ap, args);
	while (args != NULL) {
		strcat(s1, args);
		args = va_arg(ap, char *);
	}
	va_end(ap);
	return s1;
}

/* Just like strcpy(), but allows multiple strings
 * on the same line.
 */
char *strvcpy(char * s1, char * args, ...) {
	va_list ap;

	va_start(ap, args);
	strcpy(s1, args);

	args = va_arg(ap, char *);
	while (args != NULL) {
		strcat(s1, args);
		args = va_arg(ap, char *);
	}
	va_end(ap);
	return s1;
}

int main() {

	char a[8192] = "HOLA MUNDO ! -- ";

	strvcpy(a, "Hola", " ", "mundo", "!", "\n", NULL);
	strvcat(a, "Hola", " ", "mundo", "!", "\n", NULL);

	printf("%s\n", a);

}