¿Qué es Microsoft Office OpenXML?

Gráfica de tiempo contra esfuerzo en la resolucion de Microsoft Office Open XML.

Microsoft Office OpenXML es un formato para diversos tipos de documentos propuesto por Microsoft que cuenta con las siguientes ventajas (puede ahondar en cada una haciendo clic en cada línea):

Me da tristeza saber que mi propio país colaboró con esta aberración. Esto está explicado también en Groklaw, pero cita al Excelsior con un link que ya no existe (y que por eso puse el link a El Imparcial). Transcribo, debido a que es un tema acompañado por otros temas en la misma página:

Gates habla
Nada más para que se dé idea de la magnitud de la presión que se está ejerciendo en torno al voto de México en el seno de la Organización Internacional de Estandarización respecto del futuro de Open XML.
Trascendió que el mismo Bill Gates se comunicó con Felipe Calderón para influir en la postura que se hará pública el próximo lunes en Ginebra.
Aquí la comisión gubernamental está un tanto incómoda por la posición de algunos representantes de la UNAM, en especial la de Alejandro Pisanty, ex director general de Servicios de Cómputo Académico. Se trata de un respetado investigador que critica fuertemente el estándar que impulsa Microsoft. Su posición es estrictamente teórica a favor del software libre.

Actualización: Gracias al blog de Miriam Ruiz, me entero de que aún hay esperanza. Ya que su entrada está en inglés, y y lo expresó de forma insuperable, traduzco literalmente:

Después de la aprobación de OOXML como un estándar por ISO, parece que hay dos meses para apelar la decisión. La Comisión Europea, la más alta autoridad antimonopolio, investigará si OOXML, como se le conoce al formato, es «suficientemente interoperable con productos de la competencia», así como si hubo irregularidades o intentos de influenciar el debate o la votación. Si los cuerpos nacionales de ISO aportan evidencia de que Microsoft intentó influenciar los votos para asegurar la aceptación de OOXML, fortalecería el caso antimonopolio de la Comisión. De acuerdo con Thomas Vinje, cónsul legal del Comité Europeo pro Sistemas Interoperables (ECIS), «incluso si los votos fueron ganados legítimamente ganados, que lo dudo, OOXML no es un estándar abierto puesto que no está completamente implementado en plataformas de competidores, y su forma futura está sujeta puramente al control de Microsoft. Otorgar el estatus de ISO a OOXML no comienza a resolver los cuestionamientos legales de la competencia que la Comisión está indagando.» Esperemos que la Unión Europea investigue y clarifique todo esto.
“Una apelación tendría que ser resuelta antes de la publicación de un documento como un estándar Internacional», dijo Roger Frost, vocero de ISO. En otras palabras, si se emite una apelación, es viable que la publicación final de OOXML como estándar se demore. Esperemos que el proceso de apelación de ISO, si se sigue, sea menos irregular que el de aprobación. Tal vez pueda recuperar mi confianza en ISO. Veremos qué pasa.

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://blog.alvarezp.org/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("%sn", a);

}