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

Bash: *.wav in *.mp3 konvertieren

Monday, August 13. 2012

Ganz simpel:

 

# leerzeichen in Dateinamen neutralisieren
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")

for i in *.wav ; do
  echo $i
  b=`basename $i | cut -d'.' -f1`.mp3
  lame -V 1 -h $i $b 
done

IFS=$SAVEIFS
 
Das ist eher auf Qualität denn auf Geschwindigkeit / kleine Dateien getrimmt, bei Bedarf den Parameter V höher setzen. 

 

 An sich ja kein Vorhaben, das so ausgefallen oder umfangreich klingt, dass man damit lange zubringen müsste: so wie die Termindaten - als eine Reihe von thematisch sortierten Unterkalender zu einem Google account gehalten - auf dem Android SmartPhone wie auf dem Desktop (Thunderbird/Lightning) synchronisiert und aktuell zur Verfügung stehen, so will ich das auch für die Aufgaben. Und ich hätte für Aufgaben gerne die Möglichkeit, sie hierarchisch zuzuordnen, also: sub tasks.

KOrganizer hat sub Tasks und die Oberfläche wäre nicht ganz schlecht, aber die Einbindung von Google Kalendern und deren Synchronisation war so hakelig und letztlich unzuverlässig, dass ich KOrganizer genervt nur mit einer Minifunktion betraut und ansonsten von der Liste gestrichen habe.

Bleibe ich also bei ThunderBird/Lightning, muss ich den Wunsch nach sub-tasks schon mal drangeben, lightning hat das einfach nicht zu bieten. Aber selbst dann ist kein einfacher Weg zu Synchronisation in Sicht. In Lightning hat der "Provider for Google Calendar" nur den knappen Hinweis parat, das gTasks erst in einer späteren Version unterstützt würden, derzeit gebe es Probleme. Auch einen Google Kalender via caldav anzubinden hilft nicht: Lightning akzeptiert Google Kalender nicht als Aufgabenspeicher, sondern nur in einen lokalen Kalender. 

Man findet add-ons, um lightning an exchange-server oder kolab, toodledo oder zimbra anzuhängen, aber alle angebotenen Wege scheinen auf die Installation irgendeiner Groupware-Server-Soft oder einen kostenpflichtigen account hinauszulaufen. Ich war schon auf dem Wege, mein eigene Tasklistenverwaltung und Sync zu schreiben, als ich in den Mozilla-Foren auf auf einen Thread zum Thema stiess. Und darin auf den Hinweis auf memotoo

memotoo ist auch wieder ein kommerzieller Service mit einem kostenlosen Basisangebot, 50 Tasks kriegt man gratis, danach kostet es (12€/Jahr). aber dafuer haben sie schon wirklich eine eindrucksvolle Liste von Synchronisations-Optionen. Ein französisches Angebot (was man der deutschen wie der englischen Version der Seite etwas ansieht), kann https:// wenn man es aufruft, ist in IPv6 verfügbar. Synct Adressbuch, Tasks, Notizen, Mail, Kalender, Bookmarks, sonstige Dateien - probiert habe ich erstmal nur die Tasks. Klick auf Synchronize my tasks und da sind 35 Optionen parat, klick auf Google Tasks, account info, authorisieren, Optionen zur Synchronisierungsrichtung und schon stehen die eingetragenen Aufgaben da. Klick auf Sunbird (wie gut, dass ich mir die diversen Pseudonyme dieses Programms alle merken kann...) klare Installationsanweisung, pling stehen die Aufgaben in Lightning da. Details gilt es auszutesten, der erste Eindruck gefällt.

 

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:])
 

 

Tinnef a la Microsoft: winmail.dat

Friday, December 2. 2011

 Man bekommt diese Attachments von Leuten, die ihre Mail mit outlook versenden, oben zwei Zeilen Text, dass alles wichtige in dem attachten 'Word.doc steht und dann kein lesbares attachment sondern eine Datei winmail.dat, mit der ausser dem Sender selbst niemand etwas anfangen kann.

Das Format ist ein Microsoft-Standard (Oxymoron?)  mit dem treffend gewaehlten Namen tnef. So, zu meiner Freude kam ich jetzt mal darauf, dass debian eine Antwort darauf in den repositories hat:

apt-get install tnef
tnef -f winmail.dat -C Zielverzeichnis --unix-paths --verbose

klärt das Problem erstmal... 
Alternativ kann man auch einen Webdienst dazu bemuehen, etwa bei tud.at, und sich die Dateien da auspacken lassen.
Dann gibt es für Thunderbird/Icedove das Addon LookOut, welches die Inhalte der winmail.dat wie zusätzliche attachments auflistet.

Den lieben Absender, der Outlook benutzt, sollte man bitten, seine Emails künftig nur noch im reinen Text Format zu versenden. Wie das geht, kann man bei Microsoft nachlesen.

(Page 1 of 2, totaling 8 entries) » next page