Corrugated cardboard box
I want to put a tag of shame on the greedy bastards who are responsible for this.
John Steinbeck, mientras escribía Las uvas de la ira.
Salivando…

Salivando…

Autorretrato.

Autorretrato.

Poses del Coyote

Poses del Coyote

Guía para dibujar a Bugs Bunny #awesome

Guía para dibujar a Bugs Bunny #awesome

Curso de literatura europea, de Vladimir Nabokov.

Curso de literatura europea, de Vladimir Nabokov.

Merely because you have got something to say that may be of interest to others does not free you from making all due effort to express that something in the best possible medium and form. Medium and form you have utterly neglected.
Jack London en “No mentor but myself”
I’m not really good at giving advice, can I interest you in a sarcastic comment?
Chandler Bing, en Friends.
Abrir documentos de Visio (vsd/vsx) en Ubuntu

(Basado en esta guía)

Cuando ya has intentado (sin éxito) abrir el documento con Dia o LibreOffice/OpenOffice Draw, incluso intentando convertirlos con vsdump, y realmente ya lo único que quieres es poder ver el maldito diagrama de red que te han adjuntado en un correo, hay una solución que permite exportar el documento a formato svg (Scalable Vector Graphics).

Para ello usaremos libvisio, una biblioteca enmarcada dentro del proyecto LibreOffice, con lo que es probable que en el futuro Draw sea capaz de abrir directamente los documentos y Visio y tenga alguna utilidad. Viendo la trayectoria histórica de OpenOffice, es poco probable.

El principal problema es que solo existe paquete oficial para la distribución Precise Pangolin, una astuta decisión que merma drásticamente la base de usuarios potencial, pero en la línea de lo que suele hacer OpenOffice.

Para solucionarlo, basta con añadir este repositorio de paquetes al sistema (solo admite las versiones *.04):

deb http://ppa.launchpad.net/ricotz/ppa/ubuntu {lucid|natty|oneiric} main 

Y el resto es trivial:

apt-get install libvisio-tools

vsd2xhtml ./diagrama.vsd > diagrama.xhtml

Un último detalle. Por el nombre del comando podéis deducir el formato de la salida: un documento xhtml sobre el que hay que realizar una pequeña modificación manual, eliminando la cabecera y el pie del código xml y dejando únicamente el svg:

<?xml version=”1.0” encoding=”UTF-8”?>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml” xmlns:svg=”http://www.w3.org/2000/svg” xmlns:xlink=”http://www.w3.org/1999/xlink”>

<body>

<?import namespace=”svg” urn=”http://www.w3.org/2000/svg”?>

<!— 

<?xml version=”1.0” encoding=”UTF-8” standalone=”no”?>

<!DOCTYPE svg PUBLIC “-//W3C//DTD SVG 1.1//EN” “http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd”>

—>

<svg:svg version=”1.1” xmlns:svg=”http://www.w3.org/2000/svg” xmlns:xlink=”http://www.w3.org/1999/xlink” width=”841.89” height=”595.276” >

(…)
</svg:svg>
</body>
</html>
Y a continuación ya podremos visualizar el documento:
mv diagrama.xhtml diagrama.svg; inkscape diagrama.svg
¿Por qué Inkscape en vez de Dia? Porque Inkscape funciona, y Dia no sería capaz de visualizar correctamente una captura de pantalla del Acid Test.
Duplicado de objetos en Python

Como siempre en Python, hay varias opciones (incorrectas) para clonar un objeto:

  1. B = A

    Esta asignación no hace más que añadir una etiqueta idenfificativa adicional al objeto interno. Usemos su nombre “A” o su nombre “B”, estaremos trabajando siempre con el mismo objeto, y los cambios realizados sobre “B” se reflejarán en “A” y viceversa.

    Equivale al “paso por referencia”.

  2. B = A.copy() || import copy; B = copy.copy(A)

    Esta opción es el llamado shallow copy. Y es el comportamiento por defecto de Python al hacer copias.

    Como indica en la documentación del módulo copy, crea un nuevo objeto compuesto y en la medida de lo posible completa los objetos que lo componen con referencias al objeto compuesto original.

    Esto es: B es independiente de A, pero B.variable1 puede ser otra etiqueta para el mismo objeto que A.variable1, genial.

    Con este comportamiento, algunos de los cambios realizados sobre B se aplicarán sobre A, y otros no, de forma que si después creamos otro objeto C = copy.copy(A), las variables internas de C serán las de A pero con los valores de B.

  3. import copy; B = copy.deepcopy(A)

    La única forma real de clonar un objeto y crear un duplicado de verdad con Python, con comportamiento y espacio de variables independiente.

We want the best writer to win every year, but we also want to have a showcase to demonstrate that he or she is the best of an exciting bunch, that the overall activity is a progressive, modern literature, with diversity and ambition and ability, and not the pool of generic rehashing that the many outside detractors of science fiction are so quick to assume it is.
Christopher Priest, criticando el enfoque de cualquier premio de literatura fantástica que conozco.
THE READER
He is so stupid you can’t trust him with an idea.
He is so clever he will catch you in the least error.
He will not buy short books.
He will not buy long books.
He is part moron, part genius and part ogre.
There is some doubt as to whether he can read.
Journal of a Novel: The East of Eden Letters, de John Steinbeck.
Los racks son un ejemplo paradigmático de la segunda ley de la termodinámica.

Los racks son un ejemplo paradigmático de la segunda ley de la termodinámica.

The presence alone of Faulkner in our midst makes a great difference in what the writer can and cannot permit himself to do. Nobody wants his mule and wagon stalled on the same track the Dixie Limited is roaring down.
Flannery O’Connor