| — | John Steinbeck, mientras escribía Las uvas de la ira. |
| — | Jack London en “No mentor but myself” |
| — | Chandler Bing, en Friends. |
(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>
mv diagrama.xhtml diagrama.svg; inkscape diagrama.svg
Como siempre en Python, hay varias opciones (incorrectas) para clonar un objeto:
-
B = AEsta 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”.
-
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.
-
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.
| — | Christopher Priest, criticando el enfoque de cualquier premio de literatura fantástica que conozco. |
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. |






