29 octubre 2007

Apoya a ODF frente a OOXML

Microsoft intenta imponer un nuevo estándar, el OOXML (Office OpenXML), en contraposición al existente ISO26300, conocido como Open Document Format (ODF).

OOXML es un formato XML creado por Microsoft para especificar la información contenida en documentos como los creados por procesadores de texto, hojas de cálculo, presentaciones, etc. OOXML ya fue aceptado como estándar por ECMA (European Computer Manufacturers Association), en diciembre de 2006. Ahora Microsoft quiere que OOXML se convierta en un estándar ISO, en vez de emplear el existente ODF, algo que a más de uno nos parece absurdo.

La decisión final se tomará por parte de ISO en febrero de 2008.

Existe gente que recopila firmas para pedir a los miembros de ISO que voten "NO" a la aprobación de ISO DIS 29500 (Office OpenXML o OOXML) por las siguientes razones:

  1. Ya existe un estándar, el ISO26300, también llamado Open Document Format (ODF): un doble estándar añade costes, falta de certeza y confusión a la industria, los gobiernos y los ciudadanos.
  2. No hay certeza de que se vaya a implementar la especificación OOXML specification: Microsoft Office 2007 produce una versión especial de OOXML, en vez de ficheros que sigan la especificación OOXML.
  3. Falta información en la especificación, por ejemplo cómo hacer un autoSpaceLikeWord95 o un useWord97LineBreakRules;
  4. Más del 10% de los ejemplos mencionados en el estándar propuesto no validan correctamente como XML.
  5. No hay garantía de que nadie pueda escribir software que implemente completamente o parcialmente la especificación OOXML sin poder ser acusado de violar patentes de Microsoft (o tener que pagar por su uso).
  6. Este formato crea conflicto con otros estándares ISO existentes, como el ISO 8601 (Representación de fechas y horas), ISO 639 (Códigos para Representación de Nombres e Idiomas) o ISO/IEC 10118-3 (hash criptográfico);
  7. Existe un bug en el formato para hojas de cálculo, que no permite emplear fechas anteriores al año 1900: este fallo afecta a la especificación OOXML, así como a a aplicaciones como Microsoft Excel 2000, XP, 2003 y 2007.
  8. La propuesta de estándar no se ha creado tras recopilar la experiencia de todas las partes interesadas (como desarrolladores, vendedores, usuarios y reguladores), sino únicamente por Microsoft.
Si a ti también te parece absurda o incluso aberrante esta política de Microsoft de inventar nuevos estándares en vez de respetar los existentes, y de hacerlo sin contar con la aprobación de nadie más, e incluso con especificaciones incompletas y que contienen fallos, puedes firmar para solicitar que voten "NO". Quizá no sirva de nada (Microsoft es muy poderosa), pero por intentarlo, que no quede...

Más detalles (en inglés), y la casilla en la que firmar (se te enviará un correo electrónico de confirmación), en:

http://www.noooxml.org/petition

27 octubre 2007

El visor gráfico XnView sigue mejorando

El 24 de octubre estaba disponible para descarga una nueva versión del visor gráfico gratuito XnView, la 1.91.6. No se trata de grandes cambios, pero demuestra que el proyecto sigue vivo.

En esta entrega hay unas 19 pequeñas correcciones, junto con 4 características nuevas, alguna curiosa como el hecho de poder ver un imagen en Google Earth si la información EXIF incluye datos de GPS, o el que las imágenes transparentes se puedan ver con un fondo de cuadros para apreciar mejor la transparencia.

Pero lo importante no son estas pequeñas novedades, sino todo lo que esta herramienta viene ofreciendo desde hace mucho tiempo, y por lo que yo la empleo casi a diario, incluso para muchas tareas en las que me resulta más cómodo que programas "de peso" como The GIMP o incluso comerciales como Photoshop.

Entre sus características, yo destacaría:
  • Es gratuito
  • Está en español (y en otros muchos idiomas: detecta el idioma del sistema)
  • Permite visualizar imágenes en una ENORME cantidad de formatos (como pequeño ejemplo, se puede usar JPG -JPEG-, PNG, GIF, BMP, TIF -TIFF-, TGA, RAW, PSD -Photoshop-, PCX, PBM, PGM...)
  • Se puede ver las imágenes una a una o en forma de presentación continua
  • Se puede ver todas las miniaturas de las imágenes contenidas en una carpeta -directorio-, y elegir el tamaño que queremos para las miniaturas
  • Permite convertir imágenes de un formato a otro, a elegir entre la mayoría de los formatos que es capaz de mostrar
  • Permite hacer ajustes en las imágenes: brillo, contraste, curvas de nivel...
  • Se puede recortar una imagen
  • Se puede rotar una imagen o hallar su espejo (tanto horizontal como vertical)
  • Permite reducir la "profundidad de color" de una imagen (por ejemplo, de 256 colores a 16 colores), algo muy útil para que las imágenes lineales ocupen menos
  • Se puede añadir texto a una imagen, en cualquier posición, con cualquier color y cualquier tipo de letra
  • Permite ver la información EXIF de las cámaras digitales, con detalles como la fecha y hora del disparo, apertura del diafragma, velocidad de obturación, etc.
  • Se puede escanear (si tenemos scanner, claro) desde el propio XnView
  • Puede capturar la pantalla cuando pulsemos una cierta tecla o al cabo de un cierto tiempo, o capturar sólo la ventana activa, incluyendo el cursor o no, y guardar el resultado en una carpeta o mostrarlo en el propio visor
  • Puede renombrar varias imágenes siguiendo un mismo patrón (por ejemplo, "madrid-##" para crear la serie "madrid-01", "madrid-02", ...)
  • Puede crear "galerías" en formato de página web, con las miniaturas de las imágenes y enlaces a las imágenes en tamaño grande.
  • Permite crear "hojas de contacto", que resumen el contenido de una carpeta, incorporando varias imágenes reducidas (por ejemplo 5x5) en una única imagen resultante (nuevamente, el tamaño de las miniaturas y de la imagen resultado son ajustables)
  • Permite realizar tareas repetitivas, como convertir todas las imágenes de una carpeta de un formato a otra, o reducirlas todas ellas, o recortarlas, o añadirles un texto... ¡o todo ello a la vez!
  • En estas modificaciones repetitivas podemos hacer que se conserven los atributos originales de la imagen (por ejemplo, la fecha y hora de la imagen original)
  • Si hemos modificado una imagen con otra herramienta, quizá la fecha y hora de que nos muestra el sistema operativo no sean correctas; podemos corregirlo, haciendo que la fecha del fichero coincida con la fecha en que se tomó la fotografía
  • La gran mayoría de funciones se pueden realizar no sólo desde el menú, sino también con combinaciones de teclas
  • A pesar de tantas funcionalidades, no es complicado de manejar
  • Su tamaño es muy contenido (una descarga de unos 6 Mb)
  • Hay versión para Windows, claro ;-) ... pero también existe versión para Linux, para MacOS X y para otros sistemas operativos

Si lo quieres probar, puedes descargarlo (la versión para Windows) en

http://perso.orange.fr/pierre.g/xnview/endownloadwin32.html

Y su página oficial (en inglés, francés y alemán), por si quieres curiosear más, es

http://www.xnview.com/

19 octubre 2007

KUbuntu 7.10 funcionando y potenciado

Ubuntu 7.10 ya está en la calle. Y claro, también lo están KUbuntu (la distribución que yo uso actualmente) y XUbuntu.

Yo he optado por no actualizar "por software", sino hacer copia de seguridad de los datos que tenía y reinstalar desde cero, reformateando la partición, con la tranquilidad que da contar con un gestor de paquetes como Adept (o Synaptic, para Gnome, si se usa Ubuntu en vez de KUbuntu).

Como era de esperar, la instalación ha ido como la seda, sin problemas. Algún momento "muerto" después de seleccionar la distribución de teclado en el que no acabas de saber si se ha bloqueado o está comprobando cosas como las particiones, el software instalado o el existente en el Cd... pero basta con un poco de paciencia.

Eso sí, cuando termina "todavía faltan cosas". Al menos para mí. Yo necesito algo más que lo que ofrece la instalación típica, así que he entrado al gestor de paquetes Adept y le he indicado que quería más repositorios de software (desde el menú Adept): universe, restricted, multiverse...

Para que funcione correctamente la red inalámbrica con mi tarjeta WiFi Broadcomm no ha sido necesario usar el paquete ndiswrapper, sino poner en marcha el "restricted-manager-kde" para descargar e instalar drivers poco habituales apenas con un par de clics.

A partir de entonces, los paquetes que he añadido han sido:
  • El navegador Firefox y su traducción español (es-es).
  • El programa de mensajería aMsn, que me gusta más que Kopete.
  • El manejador de ficheros Midnight Commander (mc) para el modo consola y su equivalente Krusader en modo gráfico.
  • La suite ofimática KOffice, algo más ligera que OpenOffice, para casos puntuales.
  • El editor gráfico The Gimp para imágenes bitmap y el Inkscape para imágenes vectoriales.
  • El creador de diagramas Dia y el modelador UML Umbrello.
  • El compilador de C++, "g++".
  • El entorno de desarrollo Geany (no Anjuta, que es la versión 2, más incómoda para mi gusto que la 1).
  • El clásico editor "joe", que emplea las combinaciones de teclas del WordStar que yo usabé hace muuuchos años.
  • El emulador de Windows, "wine", por si necesito usar alguna aplicación propietaria de pequeño tamaño.

¿Un poco más de "fine tuning"? Sí, en mi caso el arranque es lento por la comprobación de las particiones de Windows, y la navegación por Internet es lenta, mucho más lenta que desde Windows. Las soluciones han sido:
  • Para el arranque, editar /etc/fstab y cambiar el 1 que aparece al final de los detalles de las particiones de Windows por un 0, para que no las compruebe cada vez que arranque.
  • Para la navegación por Internet, entrar a /etc/modprobe.d, crear allí un fichero "bad_list" que contuviera "alias net-pf-10 off" (todo ello sin las comillas, claro) para deshabilitar IPv6 por si mi router no lo permite y esa es la raíz del problema.
Además, el navegador de imágenes F-Spot (similar a Picasa) no quería funcionar desde el menú, si no se carga con "dbus-launch f-spot", así que he cambiado las propiedades del acceso directo.

Falta poco. El editor gráfico XnView, que me resulta muy cómodo pero no aparece en los repositorios y descargaré desde el sitio web de su autor o usaré desde Wine. Quizá también instale Free Pascal y Lazarus para mis pequeñas utilidades creadas en Pascal, tanto en modo consola como en modo gráfico. Posiblemente MySQL y PHP para las pruebas en local de desarrollo web... ¿Me falta algo interesante de lo que no me haya acordado? Se admiten sugerencias...

Creo que por ahora no necesitaré nada más. Mañana intentaré configurar la sincronización con mi PDA Palm, y con poco más que eso ya tengo un sistema totalmente utilizable. ¿Quién necesita Windows...?

09 octubre 2007

Jugando con Perl (8)

Se acaba el tiempo que puedo dedicar a experimentar con Perl.

Aun así, como pequeña muestra de alguna otra de las posibilidades que permite, voy a incluir una lista con algunas de las funciones que incorpora, por categorías. No daré detalles de su uso, pero si a alguien le interesa, al menos ya tiene un poco más fácil para encontrar el resto de la información que pueda necesitar:

Matemáticas
  • abs - valor absoluto
  • atan2 - arco tangente de Y/X en el rango -PI ... PI
  • cos - coseno
  • exp - eleva e a una cierta potencia
  • hex - convierte una cadena a número hexadecimal
  • int - parte entera de un número
  • log - logaritmo
  • oct - convierte una cadena a número octal
  • rand - devuelve un número pseudoaleatorio
  • sin - seno
  • sqrt - raíz cuadrada
  • srand - semilla para números aleatorios


Cadenas
  • chop - elimina el último carácter de una cadena
  • crypt - encriptación en un sentido, como en passwd
  • lc - devuelve una cadena convertida a minúsculas
  • lcfirst - devuelve una cadena con sólo la primera letra convertida a minúsculas
  • length - devuelve el número de bytes en una cadena
  • reverse - da la vuelta a una cadena o una lista
  • uc - devuelve una cadena convertida a mayúsculas
  • ucfirst - devuelve una cadena con sólo la primera letra convertida a mayúsculas

Sistema operativo y de ficheros
  • chdir - cambia el directorio de trabajo
  • chmod - cambia los permisos de una lista de ficheros
  • chown - cambia el propietario de una lista de ficheros
  • exec - abandona este programa para ejecutar otro
  • exit - termina este programa
  • fork - crea un nuevo proceso hijo, como el actual
  • getlogin - nombre del usuario activo
  • gmtime - convierte la hora de UNIX a un registro o cadena, usando la hora Greenwich
  • link - crea un enlace en el sistema de ficheros
  • localtime - convierte la hora de UNIX a un registro o cadena, usando la hora local
  • lock - bloquea un hilo en una variable, subrutina o método
  • mkdir - crea un directorio
  • readlink - determina dónde apunte un enlace simbólico
  • rename - cambia un nombre de fichero
  • rmdir - borra un directorio
  • sleep - espera un cierto número de segundos
  • system - ejecuta otro programa
  • time - número de segundos desde 1970
  • utime - cambia la fecha de acceso y modificación de un fichero
  • wait - espera a que cualquier proceso hijo termine
  • waitpid - espera a que un proceso hijo concreto termine

Manipulación de ficheros
  • close - cierra un fichero
  • closedir - cierra un directorio
  • eof - comprueba si un fichero ha llegado al final
  • getc - lee el siguiente carácter de un fichero
  • flock - bloquea todo un fichero
  • open - abre un fichero o un "pipe"
  • opendir - abre un directorio
  • print - envía una lista a un fichero
  • printf - envía una lista formateada a un fichero
  • read - lectura de datos de tamaño fijo mediante buffer desde un fichero
  • readdir - lee un directorio
  • readline - lee una línea de un fichero
  • seek - salta a otra posición de un fichero (acceso directo)
  • seekdir - salta a otra posición de un directorio
  • tell - devuelve la posición actual en un fichero
  • telldir - devuelve la posición actual en un directorio
  • truncate - trunca un fichero

Redes y comunicaciones
  • accept - acepta una conexión de socket entrante
  • connect - conecta a un socket remoto
  • gethostbyaddr - devuelve un host de red, dada su dirección
  • gethostbyname - devuelve un host de red, dado su nombre
  • msgrcv - recibe un mensaje SysV IPC de una cola de mensajes
  • msgsnd - envía un mensaje SysV IPC a una cola de mensajes
  • recv - recibe un mensaje sobre un socket
  • send - envía un mensaje sobre un socket

...

Pero quedan muchas más. Tienes una lista alfabética detallada -en inglés- en:

http://www.sunsite.ualberta.ca/Documentation/Misc/perl-5.6.1/pod/perlfunc.html

Y si prefieres una versión en formato PDF de estos 8 apartados, la tienes en

www.nachocabanes.com/perl/

08 octubre 2007

Jugando con Perl (7)

Ahora vamos a ver cómo crear funciones en Perl.


La forma de declararlas es usando la palabra "sub" seguida del nombre:

sub suma { ... }

Los parámetros se leen a través del array "@_", que podemos recorrer de varias formas:
  • Accediendo a cada elemento: el primer parámetro sería @_[0], el segundo @_[1], el tercero @_[2] y así sucesivamente.
  • Usando la orden "foreach", que lee cada valor del array y lo guarda en una variable: foreach (&variable) (@array)
  • Usando la orden "shift" para acceder al primer valor y "desplazar" los demás valores, de modo que el que antes era el segundo pase a ser el nuevo primero.

Las variables locales se preceden con "my":

my $valorTemporal = 0;


Si queremos devolver un valor se usa "return".


En la forma "clásica" de declarar la función, no se usan paréntesis, y la llamada se precede con un símbolo "&", así:

sub suma { ... }
&suma(3,4);

En la forma "moderna" (utilizable a partir de Perl 5) se puede declarar con paréntesis (e indicar el número de parámetros con símbolos "$") y llamar sin paréntesis:

sub suma ($) { ... }
suma(3,4);


Vamos a agrupar todo esto en un ejemplo:


# Función para saludar a varios, al antiguo estilo
sub saludo
{
print "Esto es un saludo para: ";
foreach $actual (@_) {
print $actual . " ";
}
print "\n";
}

# Función para elevar al cuadrado, al antiguo estilo
sub cuadrado {
my $numero = shift;
$numero **= 2;
return $numero;
}

# Función para sumar dos números, al modo moderno, 2 parámetros
sub suma($$)
{
return $_[0] + $_[1];
}


# Cuerpo del programa

# Primero llamamos a la función saludo, al antiguo estilo
&saludo("Nacho", "Juan");

#Luego, elevamos 3 al cuadrado
print "3 al cuadrado es : " . &cuadrado(3) ."\n";

#Finalmente, sumamos 4 y 6
print "4 + 6 = " . suma(4,6) ."\n";


El resultado de este programa sería

Esto es un saludo para: Nacho Juan
3 al cuadrado es : 9
4 + 6 = 10