Ich arbeite gerne mit Software. Es macht mir Spaß mit großen Daten zu hantieren und interaktive 3D-Visualisierungen zu schaffen die nützlich, schön und cool sind. Auf dem Weg brauch ich natürlich die Hilfe einer riesigen Vielzahl von Funktionen, Libraries und Services. Bis die ganzen tausend Bausteine gut zusammenpassen ist es ein ätzender Kampf. Aber, es wäre gelogen, wenn ich leugnen würde das mir dieser Kampf auch Spaß machen. Es ist toll an zu sehen wie sich die Einzelteile mehrerer Personen zu einem funktionieren Ganzen zusammenfügen. In meinen aktuellen Projekten verbinden sich so Source-Code-Teile von meinen Kollegen in Dresden, meinen Ex-Kollegen in Stuttgart, meinen SHK, den von mir betreuten Studenten und von mir selbst.

Was allerdings nervt sind die Interfaces und die Stabilität der Teilkomponenten. Natürlich kann man hinter einen guten Interface die Implementierungen austauschen ohne den Rest des Systems zu beeinflussen, aber zeigt mir ein gutes Interface! Ich hab noch keins gesehen das keine Probleme mit sich bringt, und ich hab mir einige angeschaut. Die Weiterentwicklung eines Systems wird immer schwieriger je mehr Komponenten hinein kommen. Vor allem wenn es keinen Architekten mehr gibt, der den wirklichen Überblick hat.

MegaMol-Highlevel-ArchitectureTatsächlich ist MegaMol auf genau diesem Weg. Es wird immer aktiver in Stuttgart und Dresden eingesetzt, und natürlich möchte ich diesen Prozess fördern und ausweiten. Immerhin ist MegaMol mein Projekt und ich bin auch stolz drauf. Aber, je größer es wird und je mehr es eingesetzt wird, desto schwieriger ist es weiterzuentwickeln. Einige fundamentale Probleme brauchen fundamentale Änderungen. Das wird noch für viel Unmut sorgen. Mir ist auch nicht klar wer den ganzen Arbeitsaufwand stemmen wird können. Einerseits trete ich etwas zurück um andere Aufgaben zu erfüllen und versuche hauptsächlich dirigierend die Weiterentwicklung von MegaMol zu leiten. Andererseits wird die Entwicklung von MegaMol gerade wie der schwarze Peter von einem Doktoranden zum nächsten geschoben, was auch nicht gerade zielführend ist. Ich bin mir wirklich nicht sicher was kommen wird.

configurator2MegaMol-Modul-Graph (10.1109/TVCG.2012.282)

Aber ich habe meine Pläne. „Partitioning“! Und ich weiß genau welche Teile Priorität haben und welche kritisch sind. Das Problem sind aber die Interfaces zwischen den Teilen. Diese sind noch nicht sauber und damit ist das ganze Partitioning zurzeit für die Katz. Die ersten Versuche das zu korrigieren waren … semi-erfolgreich. Aber, ich denke gar nicht daran aufzugeben!

Immer wieder steht man vor ganz einfachen Aufgaben und sieht die einfachste Lösung nicht. Des Letzt musste ich zwei Binär-Dateien einfach nur zu einer großen zusammenfügen. Ich wusste zuerst wirklich nicht wie ich das unter Windows ohne irgendwelche Kopfstände hinkriegen könnte. Allen möglichen Unsinn hatte ich mir überlegt, alles auf ein Linux rüber zu kopieren und es dort zu machen, ein Powershell Script, ein Tool googlen, selber ein kleines DotNet-Tools zusammenklicken. Glücklicherweise entscheid ich mich anstatt nach einem Tool, einfach mal nach dem Problem selbst zu googlen. Dabei kam raus, Windows kann das einfach selbst. Bzw. die alten DOS-Kommandos die in Windows noch immer bestehen:

copy /y /b file1+file2 dest

Erschreckend einfach.

Achtung! Dieser Post ist veraltet: hier geht’s zum Update.

Ich habe vor langer Zeit aufgehört mit Dual-Boot-Systemen zu arbeiten und meine Art zu Arbeiten ist fest mit Windows und den dortigen Produkten verankert. Details und den dazugehörigen Glaubenskrieg zwischen Windows und Linux spare ich mir hier. Allerdings ist Linux ein System auf das ich durchaus auch nicht verzichten kann. Die augenblicklich beste Lösung für mich ist VirtualBox und der Betrieb eines virtualisierten Gast-Linux. Im gigantischen Distributions-Zoo hab ich mich recht einfallslos für Ubuntu entschieden. Als Computergraphiker und Visualisierung ist mir hierbei natürlich auch der OpenGL-Support in der Virtualisierung sehr willkommen. Diese Woche habe ich eine neue virtuelle Maschine aufgesetzt und wurde von folgendem Fehler heimgesucht der meine OpenGL-Anwendungen nicht starten lassen wollte:

libGL error: pci id for fd 4: 80ee:beef, driver (null)
OpenGL Warning: glFlushVertexArrayRangeNV not found in mesa table
OpenGL Warning: glVertexArrayRangeNV not found in mesa table
OpenGL Warning: glCombinerInputNV not found in mesa table
OpenGL Warning: glCombinerOutputNV not found in mesa table
OpenGL Warning: glCombinerParameterfNV not found in mesa table
OpenGL Warning: glCombinerParameterfvNV not found in mesa table
OpenGL Warning: glCombinerParameteriNV not found in mesa table
OpenGL Warning: glCombinerParameterivNV not found in mesa table
OpenGL Warning: glFinalCombinerInputNV not found in mesa table
OpenGL Warning: glGetCombinerInputParameterfvNV not found in mesa table
OpenGL Warning: glGetCombinerInputParameterivNV not found in mesa table
OpenGL Warning: glGetCombinerOutputParameterfvNV not found in mesa table
OpenGL Warning: glGetCombinerOutputParameterivNV not found in mesa table
OpenGL Warning: glGetFinalCombinerInputParameterfvNV not found in mesa table
OpenGL Warning: glGetFinalCombinerInputParameterivNV not found in mesa table
OpenGL Warning: glDeleteFencesNV not found in mesa table
OpenGL Warning: glFinishFenceNV not found in mesa table
OpenGL Warning: glGenFencesNV not found in mesa table
OpenGL Warning: glGetFenceivNV not found in mesa table
OpenGL Warning: glIsFenceNV not found in mesa table
OpenGL Warning: glSetFenceNV not found in mesa table
OpenGL Warning: glTestFenceNV not found in mesa table
libGL error: core dri or dri2 extension not found
libGL error: failed to load driver: vboxvideo

Erstaunlicherweise hat kurzes Googlen nicht viel gebracht. Lediglich auf einer Seite habe ich gelesen, dass es das Problem mit den GuestAdditions zusammenhängen könnte und man unbedingt darauf achten solle die aktuellste Version zu installieren. Logischerweise hatte ich aktuellste Version drauf.

Nach etwas mehr Googlen kam raus, dass das Problem im Zusammenhang mit sehr neuen OpenGL-Extensions existiert; Extensions zu neu für die virtuellen Treiber. Hier gibt es also scheinbar einen Konflikt zwischen dem was die virtualisierte Graphikkarte angibt welche Extensions sie beherrscht und damit was der Linux-Treiber daraus machen kann.

Tatsächlich konnte ich das Problem für mich lösen indem ich auf ältere Versionen der GuestAdditions zurückgegangen bin. Mit Version 4.3.12 läuft alles einwandfrei. Mit den neueren Versionen bis 4.3.18 nicht. Dies ist dann wohl ein Iso was ich mir auf der Platte behalte und abwarte ob neuere GuestAdditions oder Ubuntu-Updates das Problem in den Griff kriegen werden.

Interprozesskommunikation war schon immer ein bisschen ein Mist, zumindest wenn man plattformunabhängiges C++ als Arbeitsgrundlage verwendet. Ich hab viel Ausprobiert und irgendwie war alles nicht zufriedenstellend. Entweder war die Performance nicht akzeptable oder die Benutzbarkeit oder Wartbarkeit waren es nicht. Ich hatte keine Methode gefunden auf der ich guten Gewissens aufbauen wöllte.

Ein de-facto Industriestandard sind ja wohl zweifelsohne Webservices. Aber aus meinem Blickpunkt, dem Blickpunkt eines Visualisierers und Computergraphikers, ist der Overhead, sowohl der Erzeugung als auch der Laufzeit, nicht wirklich akzeptabel. Ich rede nicht unbedingt von jeweils Datendurchsatz, Architektur oder Latenzzeiten. Nimmt man aber alles zusammen und versucht sie auf das Szenario der interaktiven Visualisierung anzuwenden so erhält man ein System was 90% der Probleme löst. Die restlichen 10% allerdings, sind so schmerzhaft schlecht, dass man immer gezwungen wird einen zweiten Datenkanal zu nutzen. Und schon macht man irgendwie wieder alles doppelt. Die Programmierung in der Computergraphik und der interaktiven Visualisierung ist so bedauernswert weit weg von sinnvollem Software Engineering. Aber ich habe es mir ja auch ausgesucht dieses Problem als eigenes Forschungsfeld anzugehen und entsprechende Lösungen zu erarbeiten. Es ist eine äußerst unfruchtbare Arbeit, aber es ist mir wichtig und ich bin überzeugt, dass es das wert ist.

Eine Idee die mir seit neuster Zeit im Kopf rum geht dreht sich hierbei um JSON-RPC. Das Protokoll ist simpel, klein, trivial, aber praktisch für alle technischen Probleme ausreichend; eine charmante Kombination. Im Besonderen, da der eigentliche Kommunikationskanal ja nicht feststehen muss. So können die entsprechenden Anfragen in den high-performance Datenstrom der restlichen Kommunikation mit eingeflochten werden, müssen es aber nicht. Als reine interpretierende und verwaltende Ebene halte ich das Ganze für eine ungemein gute Idee.

Und an der konkreten Umsetzung krankt es wieder. Ich will nicht behaupten, dass ich bisher eine erschöpfende Suche nach Bibliotheken durchgeführt hätte, aber die die ich bisher gesehen habe sind von ernüchternder Qualität. Während, als Grundlage, jsoncpp und jansson einen guten Eindruck hinterlassen haben, kann ich das über JsonRpc-Cpp und libjson-rpc-cpp nicht behaupten. Ich will die beiden Projekte nicht schlecht machen. Sie erfüllen nur einfach meine Anforderungen nicht, z.B. dass man sie als Dlls unter Windows bauen kann, ohne massive Änderungen am Quelltext durchführen zu müssen.

Ehrlich gesagt, weiß ich noch nicht wo das ganze mich hin führen wird. In nächster Zeit sicherlich nirgendwo hin, da ich noch genug andere und wichtigere Baustellen gerade offen habe. Aber die Idee bleibt gut und ich werde sie weiter verfolgen.

Meine Arbeit nimmt schön Fahrt auf und meine Projekte entwickeln sich wie erwartet. Ok, vielleicht etwas langsamer als ich es gerne hätte, aber ich kann zufrieden sein.

Als Teil der ganzen Entwicklung habe ich nun auch mein Forscherprofil hier auf meiner Webseite aktualisiert. Bald gibt’s auch wieder neue Infos zu meiner Forschung und meinen aktuellen Projekten.

Die letzte Woche war wieder sehr arbeitsreich. Ist irgendwie auch nichts neues mehr. Naja.

Zusammen mit zwei Kollegen habe ich eine Einreichung zu einer Konferenz erarbeitet. Ein schönes Paper über eine Visualisierungstechnologie. Natürlich kann ich mehr noch nicht sagen solange das Paper nicht angenommen ist. Mal schauen. Wir haben gut gearbeitet und ich bin ganz zuversichtlich. Ok. Das war ich auch bei den meisten Paper die dann abgelehnt wurden. Wie dem auch sei.

Außerdem gab es dann letzte Woche noch eine gute Nachricht. Das Paper eines Kollegen, bei dem ich beteiligt war, wurde auf der Multimedia Modelling 2015 angenommen:

  • [DOI] M. Spehr, S. Grottel, and S. Gumhold, „Wifbs: A Web-based Image Feature Benchmark System,“ in MultiMedia Modeling – 21th Anniversary International Conference, MMM 2015, Sydney, Australia, January 5-7, 2015, Proceedings, 2015, pp. 159-170.
    [Bibtex]
    @inproceedings{spehr2015mmm,
      author    = {Marcel Spehr and
                   Sebastian Grottel and
                   Stefan Gumhold},
      title     = {Wifbs: A Web-based Image Feature Benchmark System},
      booktitle = {MultiMedia Modeling - 21th Anniversary International Conference, {MMM} 2015, Sydney, Australia, January 5-7, 2015, Proceedings},
      editors   = {Xiangjian He, Suhuai Luo et al.},
      year      = {2015},
      pages     = {159--170},
      doi       = {10.1007/978-3-319-04114-8_2},
    }

Ich will mich nicht mit fremden Federn schmücken. Die Idee, die Umsetzung, das System und das Paper stammt alles zu den größten Teilen von meinem Kollegen Marcel Spehr. Tolle Leistung. Alles was ich gemacht habe war dabei zu stehen, hier und da etwas mit anzupacken oder eine Richtung vorzugeben, und dann natürlich beim eigentlichen Schreiben des Papers zu unterstützen.

System-Paper find ich toll. Es sind Arbeiten die über einfache Software in der Forschung hinausgehen. Diese Systeme, dieses hier und mein MegaMol, haben potential wirklich nützlich zu bleiben.

Heute gibt es auch nur eine kurze Notiz zum Thema MegaMol.

Es ist vollbracht! Das System Paper zu MegaMol selbst ist veröffentlicht:

  • [DOI] S. Grottel, M. Krone, C. Müller, G. Reina, and T. Ertl, „MegaMol — A Prototyping Framework for Particle-based Visualization,“ Visualization and Computer Graphics, IEEE Transactions on, vol. 21, iss. 2, pp. 201-214, 2015.
    [Bibtex]
    @article{grottel2014megamol,
        author={Grottel, S. and Krone, M. and M\"{u}ller, C. and Reina, G. and Ertl, T.},
        journal={Visualization and Computer Graphics, IEEE Transactions on},
        title={MegaMol -- A Prototyping Framework for Particle-based Visualization},
        year={2015},
        month={2},
        volume={21},
        number={2},
        pages={201--214},
        keywords={Data models;Data visualization;Graphics processing units;Libraries;Rendering (computer graphics);Visualization},
        doi={10.1109/TVCG.2014.2350479},
        ISSN={1077-2626}
    }

Doi: 10.1109/TVCG.2014.2350479

Die harte Arbeit hat sich gelohnt. MegaMol ist damit nun im IEEE Journal „Transactions on Visualization and Computer Graphics“, kurz TVCG, veröffentlich, dem Top-Journal in der Visualisierungs-Community. Ich muss zugeben, ich bin schon ziemlich stolz drauf.

Mal sehen wie es jetzt weiter geht. An sich wäre es schon möglich und gut MegaMol nun tatsächlich weiter zu bringen und zu pflegen als bisher. Ich würde das gerne machen. Aber natürlich hängt es von meiner beruflichen Zukunft ab in wie weit ich das können werde. Die Software hat so viel Potential. *hach*

Während meinem Urlaub ergab sich mal wieder einiges. Einerseits durfte ich natürlich arbeiten und für einen ausgefallenen Reviewer einspringen. Andererseits wurde ich nun aber auch auf einen Workshop eingeladen um dort meine Arbeit vorzustellen, im Besondern natürlich MegaMol™. Schön wenn man geschätzt wird, auch wenn der Workshop direkt von meinen Kumpels aus dem SFB 716 veranstaltet wird.

Heute möchte ich über eine meiner neusten wissenschaftlichen Publikationen sprechen: Visualisierung multi-dimensionaler Trajektorien. Die Publikation ist in der Wiley Online Library elektronisch verfügbar (http://onlinelibrary.wiley.com/doi/10.1111/cgf.12352/abstract): Visual Analysis of Trajectories in Multi-Dimensional State Spaces [1].

Zunächst einmal, was ist eine multi-dimensionale Trajektorie? Wir untersuchten Zustände komplexer System, wie automatisierte Systeme oder Roboter. Jedes Element in so einem System, z.B. ein Motor oder ein Sensor, besitzt mehrere Zustandsvariablen, wie gemessene Temperator oder Rotationskraft des Motors. Diese Variablen können sogar vektoriell sein. Aber selbst wenn sie nur skalar sind, da System ist üblicherweise aus vielen solchen Elementen zusammengesetzt. Der Zustand des Gesamtsystems ist daher immer der Vektor aller Zustandsvariablen aller Elemente. Die Systeme die wir untersucht hatten haben Vektoren mit mehreren Duzend Variablen. Diese Größenordnung benennt man mit multi-dimensional, im Gegensatz zu hoch-dimensional, womit Räume mit mehreren hundert oder mehreren tausend Dimensionen gemeint sind. Der Zustand eines Systems als Ganzes kann nun als Punkt in dem multi-dimensionalen Zustandsraum interpretiert werden. Allerdings sind unsere Systeme nicht statisch, sondern werden in Echtzeit überwacht. Die Werte der Zustandsvariablen ändern sich, z.B. steigen Temperaturen und Motoren drehen sich. Der Zustandspunkt des System bewegt sich also durch den Zustandsraum. Der Pfad den er dabei nimmt ist seine Trajektorie.

md_trajectory_teaser

Unser Ansatz zur Visualisierung dieser Daten basiert auf klassischen Visualisierungmetaphern der multi-dimensionalen Datenvisualisierung: nämlich Scatterplot Matrizen und Parallele-Koordinaten-Plots. Wir nutzen zusätzliche Darstellungen, z.B. temporale Heat-Maps. Der Hauptaspekt unserer Arbeit ist jedoch die Art und Weise wie wir diese Diagramme berechnen. Normallerweise würde man die multi-dimensionalen Datenpunkte einfach in den Diagrammen als Punkte oder Linienzüge einzeichnen. Wir, jedoch, nutzen die Art der Daten aus, nämlich die zeitliche Kontinuität. Wir integrieren die Daten über die Zeit um kontinuierliche Diagramme zu erzeugen. Diese Arbeit basiert auf Vorarbeiten kontinuierlicher Scatterplots und Paralleler-Koordinaten-Plot, die räumlich integrieren. Wir haben diese Integration auf die zeitliche Dimension übertragen.

md_trajectory_compare

[1] [doi] S. Grottel, J. Heinrich, D. Weiskopf, and S. Gumhold, „Visual Analysis of Trajectories in Multi-Dimensional State Spaces,“ Computer Graphics Forum, vol. 33, iss. 6, pp. 310-321, 2014.
[Bibtex]
@article {Grottel2014HDTraj,
  author = {Grottel, Sebastian and Heinrich, Julian and Weiskopf, Daniel and Gumhold, Stefan},
  title = {{Visual Analysis of Trajectories in Multi-Dimensional State Spaces}},
  year = {2014},
  journal = {Computer Graphics Forum},
volume = {33},
number = {6},
pages = {310--321},
  doi = {10.1111/cgf.12352}
}