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

Xmind Mindmaps konvertieren

Monday, April 9. 2012

There is prior post regarding conversion of .xmind documents to other mind mapping formats and also re: import of text to Freemind, but now there is a new angle to those topics after I discovered a python modul which comes quite handy if you want to parse or create .xmind mindmaps. 

It goes by the name of mekk.xmind, authered by Marcin Kasperski. 

Download it with mercurial, (if you don't have this installed, you can get it on debian by apt-get install mercurial)

hg clone https://bitbucket.org/Mekk/mekk.xmind
cd mekk.xmind
python setup.py install

You will find some example scripts next to he sources and it worked fine here immediately..

Frustrated over Kontact I still search for a suitable way to handle task lists so that task administration integrates with my desktop thunderbird/lightning, google calendars and my androisd smartphone which nicely interfaces to google tasks. And as I like to structure my ideas with mindmaps and quite like XMind I tried to use XMind as a means to write structured task lists. Unfortunately lightning doesn't do subtasks. It has been asked for for years but not implemented.

Among the alternatives for task managment on linux there is  Task Coach (pro: open source, does sub tasks SyncML, file format XML, some export options, con: usage could need enhancement, export formats uncomplete, so after reimporting an exported task list it doesn't necessarily rebuild the same thing, supports iOS but no direct support for android). For android they recommend  Todo.txt and task coach exports and imports task lists in todo.tx - Format. 

Can't say I'm content with all this, it's more like a waypoint on my search. Below is a little python script that lets you excerpt a todo.txt task list from an xMind mindmap.

 

#!/usr/bin/python
# -*- coding: utf-8 -*-

# (c) 2012, Daniel Plaenitz
#
# depends on mekk.xmind by Marcin Kasperski
# hg clone https://bitbucket.org/Mekk/mekk.xmind
#

# python xmind2todo.py inputFile [outputFile]

from mekk.xmind import XMindDocument

from datetime import date
import sys
import codecs

output = u""

def parse_sheet(file_name):
    xmind = XMindDocument.open(file_name)
    sheet = xmind.get_first_sheet()
    root = sheet.get_root_topic()
    
    for topic in root.get_subtopics():
        parse_level(topic,[],root.get_title())


def parse_level(topic,names,rootTitle):
    global output
   
    _names = names[:]
    _names.append(topic.get_title())
    _line = u""
    
    for name in _names:
        _line += u" -> "+name
    
    _line = _line[4:]
    _line = " ".join(_line.split('\n'))
    
    _prio = u""
    if 'priority-1' in list(topic.get_markers()):
        _prio = "(A) "
    elif 'priority-2' in list(topic.get_markers()):
        _prio = "(B) "
    elif 'priority-3' in list(topic.get_markers()):
        _prio = "(C) "   
    elif 'priority-4' in list(topic.get_markers()):
        _prio = "(D) "
    elif 'priority-5' in list(topic.get_markers()):
        _prio = "(E) "
    elif 'priority-6' in list(topic.get_markers()):
        _prio = "(F) "
    
    if 'task-done' in list(topic.get_markers()):
        _prio = u"x " + _prio
        
    _line = _prio + date.today().isoformat() + " " + _line
    _line += " +"+rootTitle
    
    
    output += _line + "\n"
    
    for stopic in topic.get_subtopics():
        parse_level(stopic,_names,rootTitle)
        
def main(argv):
    global output

    if len(argv) < 1 :
        print "xmind2todo.py inputFile [outputFile]"
        sys.exit(2)  
        
    infilePath = argv[0]
    outfilePath =  infilePath+".txt"
    
    if (len(argv) > 1):
        outfilePath = argv[1]

    parse_sheet(infilePath)
        
    print "writing to "+outfilePath    
    f = codecs.open(outfilePath, encoding='utf-8', mode='w')
    f.write( output )
    
if __name__ == "__main__":
    main(sys.argv[1:])
 

 

MindMaps: Xmind -> FreeMind

Thursday, April 21. 2011

Ich setze zur Strukturierung meiner Gedanken gerne MindMaps ein und, was die Software angeht, schon seit längerem XMind. Das ist in Java und so für Win*, MacOsX und Linux (für versch. Architekturen und Distros) verfügbar, sieht ansprechend aus, läuft stabil, ist in einer kostenlosen Variante verfügbar (dazu gleich mehr) und hat nur einen Haken: es versucht den alten Dateiformat-Marketingtrick, nämlich einerseits viele Importformate zu unterstützen, andererseits aber den Export geizig zu handhaben. Erst die kostenpflichtige Pro-Version unterstützt den Export nach .mmap oder .mm, die kostenlose Version bietet in der Zusammenarbeit mit anderen MindMap-Softwares nur Einbahnstrassen. 

Was den Nutzen der Software für die Zusammenarbeit mit anderen doch sehr reduziert, und auch schmerzt, wenn eine Plattform dazukommt, die XMind nicht bedient: in meinem Fall Android 2.3. Da gibt es im Market eine recht überschaubare Anzahl von Mindmap appls, ThinkingSpace und sonst nicht viel.

ThinkingSpace liest und schreibt .mm, und wenn ich also meine am Desktop begonnenen Überlegungen zu einem Thema während der Bahnfahrt auf dem SmartPhone weiterführen will, muss ich die Frage der Dateikonvertierung lösen. (oops, siehe Update unten!) Leider ist MindMapping eher ein Nischenthema und eine Suche nach Konvertern für die drei Dateiformate .xmind, .mmap und .mm geht leer aus. 

Noch einmal zu der kostenlosen Version von XMind: sie ist Crippleware. Ich hatte, noch unter win*, eine aktuelle Version installiert, die etliche MenueEinträge enthielt, die immer nur auf die Pro-Version verwiesen. Die letzte Version, die all' diese - eh nicht verfügbaren - Features auch gar nicht erst anpries, war Version: 3.0.1. das ist auch die Version, die ich unter allen drei OSen einsetze.

Meine Suche nach Datei-Konvertern führte mich nun dazu, dass es die Sourcen für XMind in einem bestimmten Featureset auch als Opensource gibt.  Will heissen: die Opensource-Version 3.2.1 sieht für mich bis auf ein entscheidendes Detail (Exportformate!) einfach gleich aus. Kein Feature-Spam in den Menüs und FreeMind als ExportOption: was wollte ich mehr?

Nun, nach dem Download der Sourcen in einem .zip stellte sich zunächst erst mal die Frage, wie ich das zum Laufen bekomme. Java ist ja doch eher unbekanntes Terrain für mich. Es fand sich aber ein sehr hilfreiches Kochrezept auf code.google.com/p/xmind3/wiki/How_to_build_XMind_from_source  dem ich gefolgt bin und letztlich auch mit Erfolg. Ich hatte aber schon einige Hürden zu überwinden.

Step 1.3:  Copy to {ECLIPSE}/plugins/
ich habe die drei letztlich sowohl zu /home/username/.eclipse/org.eclipse.platform_3.5.0_155965261/plugins als auch nach /usr/lib/eclipse/plugins/ kopiert, habe auch alle in den Comments erwähnten restart/refresh/reloads angewandt, aber aber...

Step 1.5:  Available Software Sites braucht Add: http://download.eclipse.org/tools/gef/updates/releases/

Step 3.2: stehe aber dennoch mit 62 Error da, die sich offenbar alle auf bouncycastle zurückführten. Was es letztlich brachte war, diesem Comment zu folgen:
"Here is what I did to fix it easily.
Right clicked org.bouncycastle jar, choose import
Chose Plugin Development > Plugins and Fragments
Took defaults - hit Next
Choose the org.bouncycastle jar, then "Add"
Finish.
Project is now in workspace and everything compiles."

Fein, nun läuft es als eclipse-> run, wie ich es zu einem standalone compiliere bzw packe, habe ich noch nicht erforscht. Aber mit ps faux|less konnte ich mir die command line mit allen Optionen heraussuchen und habe sie in eine ~/bin/xmind.sh gesteckt, die sich, mit dem KDE - Menu Editor ohne weiteres in das Menu einbinden liess und funzt.

Alles geht wie zuvor, nur zusätzlich endlich eine Export-Option nach FreeMind.  

 

Update:
Hatte ich nur nicht richtig hingesehen oder hat ThinkingSpace seither dazugelernt? Jedenfalls kann die App jetzt Freemind, Mindjet und XMind - Format lesen und Schreiben, verbindet sich optional auch mit MindMeister.

Und so kann man es zum Konvertieren benutzen:
- die.xmind auf die SD-Karte schieben
- ThinkingSpace->Menu->Einstellungen->Default file format->Freemind auswählen
- Rücktaste, in der Liste der vorhandenen mindmaps lange auf die.xmind druecken
- öffnet sich Kontext-Menü, da Kopieren wählen.
- OK, jetzt gibt es auf der SD-Karte neben die.xmind auch die.mm 

Update:
ThinkingSpace heisst jetzt MindJet.

Update 26.9.2012:
Mit Arch Linux finde ich eine Version von XMind,  XMind 2012 (v3.3.0), die den Export und Import von Freemind und Mindjet Manager als Option anbietet (und mehr.) Ich habe auch erstmal kaum "reservierte" Optionen in den Menues gesehen, damit hat sich die Notwendigkeit eines externen Konvertierungstools eigentlich erledigt.

(Page 1 of 1, totaling 3 entries)