Xmind to object

Monday, November 19. 2012

Eine Powerpoint-Folie als Vorlage um dann mit dem Editor ein mehrfach verschachteltes object in javascript-Notation zusammenzuschreiben, und trotz aller Umsicht ist bei copy&paste-Aktionen dann doch irgendwo ein Komma oder eine Klammer verloren gegangen - eine Aufgabe, die mich recht schnell zu der Überlegung führt, dass da ja wohl etwas nicht stimmt, wenn ich als Mensch versuche, was die Maschine doch wirklich besser kann: 
stur und unablenkbar genau eine langweilige, umfangreiche Routine abzuarbeiten.

Die erste Idee - ein script, dass aus einer .pptx direkt  das gewünschte javascript-Object erzeugt - lasse ich schnell wieder fallen, zu gross die Variabilität des Inputs und noch dazu ist das XML der .pptx ist ein wenig abschreckend geraten...

Stattdessen entscheide ich mich für ein freundliches Zwischenformat, und das ist für mich eine Xmind - mindmap. Ein besonders freundlicher Zug dieses Formates ist die Tatsache, dass es dank MEKK mit python (2.x) sehr einfach ist, mindmaps zu generieren oder zu parsen. 

Wie man MEKK unter debian installiert, habe ich in einem vorigen Artikel schon aufgeschrieben, diesmal unter cygwin auf win7 war es nicht so sehr anders: mercurial und gcc mit setup installieren, hg clone https://bitbucket.org/Mekk/mekk.xmind, im ersten Durchlauf beklagt hg noch dass fehlen einiger Pakete (libxml und libxslt in dev-Version) und dann steht das MEKK-Modul bereit. 

Die Umwandlung der powerpoint-Folien in Xmind-Maps habe ich mir als zweiten Schritt aufgehoben, hier erstmal das Script mon der Map zum Objekt. Als frühe alpha ist es ein wenig beschränkt, was die Verschachtelungstiefe anbelangt, weil es mein Anwendungsfall so wollte, geht das Script von einer Struktur aus, wo unter dem Wurzelknoten zwei Hierarchiebenen vorgesehen sind, die optional noch childNodes haben  können, während für die dritte Ebene diese Möglichkeit nicht mehr erwartet wird.   Das kann man sich aber gegebenenfalls anpassen.

Mit dem Aufruf    python x2o.py test.xmind   gestartet erzeugt das Script ein HTML-Dokument, dessen Name teils von dem geparsten .xmind bestimmt wird. Im beiliegenden Beispiel lautet der Text des Wurzelknotens "project" und die erzeugte Datei heisst test_project.html.

Das HTML-Dokument enthält das generierte js-object, mit einem Editor kann man es sich herauspicken, mit einem Browser auf syntaktische Korrektheit pruefen. Wenn das Objekt funktioniert, gibt das .html abschliessend mit einem alert("Es geht!" Bescheid, wenn man es im fireFox öffnet, zeigt der Alert gleich die source des object an.

Download: x2o.zip

 ich habe es in vorigen Artikeln für debian schon notiert, unter arch sah die Abfolge dann ein wenig anders aus:

# also root
sudo su

# welches /dev/.. ist die neue Platte denn?
fdisk -l

# im Beispiel /dev/sdb. Das zunaechst mit Rauschen fuellen (sonst sehen Angreifer auf den ersten Blick, wo was wohnt
shred -v -n 1 /dev/sdb

# das dauert! eine gute Gelegenheit, mal ins Kino zu gehen, oder die Liebste zu besuchen ...

# dann erst mal 'nen mount point erstellen
mkdir /mnt/schoenerName

# das verschluesselte device einrichten
cryptsetup -c aes-xts-plain64 -y -s 512 luksFormat /dev/sdb

 
# da wird man zweimal nach der PassPhrase gefragt. Je laenger je besser, <11 kann man vergessen
# dann das device oeffnen
cryptsetup luksopen /dev/sdb schoenerName
 
# formatieren 
mke2fs -t ext4 -L schoenerName /dev/mapper/schoenerName

 # und mounten
mount /dev/mapper/schoenerName /mnt/schoenerName

 

# eins noch:
# Jedenfalls bei mir gibt es mit den deviceNames, /dev sdb, /dev/sdc usw, gelegentlich Ärger, plötzlich ist die Platte,

# die beim letzten Boot noch /dev/sdc war, als /dev/sdg in der Liste. Abhilfe schafft die uuid.

 

ls -l /dev/disk/by-uuid/


# da kopiert man sich jetzt die uuid der /dev/sdb 'raus und notiert sich an wohl geschütztem Ort für das nächste Boot diese Abfolge:
 

 

cryptsetup luksOpen /dev/disk/by-uuid/die-rauskopierte-uuid-der-platte schoenerName

1strengGeheimePassPhrase

mount /dev/mapper/schoenerName /mnt/schoenerName

 

 

 

(Page 1 of 1, totaling 2 entries)