Morgen startet die erste Woche des Wintersemesters 2015/16 an der TU Dresden. Ich werde wieder die Vorlesung über wissenschaftliche Visualisierung halten. Zusätzlich betreue ich mehrere Studenten bei ihren Abschlussarbeiten (Bachelor, Diplom, etc.). Und natürlich brauchen auch die Vorbereitungen für das Tutorial zu Partikelvisualisierung auf der IEEE VIS viel von meiner Zeit. Es wird wieder eine anstrengende Woche.

Windows kommt mit vielen Funktionen die kaum einer kennt. Und bei einigen frage ich mich warum. Ein gutes Beispiel sind Links: Hardlinks, Junctions, etc., nicht die albernen Verknüpfungen. NTFS kann das alles, konnte es schon immer, und die meisten *nix-User wissen auch damit was anzufangen und dass das was Cooles ist. Wie gesagt, Windows kann das auch. Es ist nur nie offiziell in die GUI rausgeführt worden. Wahrscheinlich aufgrund einer politischen Entscheidung, da man Angst hatte, dass der Standard-Windows-Benutzer damit nur Unfug anfangen würde und alles noch viel viel Schlimmer werden würde als es sowieso schon war. Vermutlich hat man damit sogar Recht. Aber für uns Windows-Poweruser sind Links eine tolle Möglichkeit unsere Systeme zu optimieren. Was im Normalfall aber fehlt ist dann er Bedienungskomfort. Und genau hier kommt die Link Shell Extension von Schinagl. Damit funktioniert es gut und schön. Was will man mehr?

Auch dieses Sommersemester habe ich wieder meine Vorlesung „C++-Programmierung für Computergraphik“ gehalten, und auch dieses mal haben wir ein kleines Spiel in der dazugehörigen Übung geschaffen. Und, wie immer, heißt die letzte Übungsaufgabe „… und nun macht noch was Cooles dazu.“ Ich präsentiere, nicht ohne Stolz, die Arbeit Anderer:

https://youtu.be/etw_7gSU9iY

Ich achte sehr genau darauf welche Fotos von mir im Internet im Umlauf sind. Und noch mehr achte ich auf private Informationen. Aber bei meinem aktuellen Urlaub gab es jetzt diese sehr günstige Gelegenheit: Wenn man kann, kann man mich durch die Web-Cam der MS Europa sehen (nein, ich bin nicht auf dem Schiff unterwegs).
MS-Europa-Webcam

Ich bin ein Microsoft-Fan-Boy. Das gebe ich gerne zu. Aber eins ist klar, die Jungs aus Redmond kochen auch nur mit lauwarmem Wasser. Und für Betatests habe ich keine Zeit und keine Geduld.

Diese Woche habe ich meine drei PCs auf Windows 10 hochgebügelt. Alle Rechner liefen vorher mit Windows 8.1, installiert mit dem gleichen Image und benutzt vor mir in etwa der gleichen Art und Weise. Daher fand ich es schon ziemlich beeindruckend, dass die Upgrade-Installation von Windows 10 aus demselben Image auf den drei Rechnen zu komplett unterschiedlichen Ergebnissen führte:

Mein Arbeitsplatzrechner hat nach dem Upgrade die Icons zu fast allen installieren Programmen vergessen. Ein Ergebnis der Tatsache geschuldet das ich den überflüssigen Installations-Cache von meiner zu kleinen SSD auf eine normale Platte verschoben und anschließend zurückverlinkt hatte. Den Link hat der Upgrade-Installer zur Sicherheit mal gesprengt. Man weiß ja nie.

Auf meiner Surface Pro 3 hat mich Windows 10 nach der Installation damit begrüßt, dass es mir erzählt hat welchen Funktionen ich doch alle hätte nutzen können, wenn ich eine Touch-Eingabe hätte. … Wut? Immerhin, nach zweimaligen zusätzlichen Neustarten hat sich dieses Verhalten etwas normalisiert. Nur dass die Notiz-Taste des Stifts sich partout nicht auf OneNote mappen lässt, sondern unveränderlich auf die nutzlose OneNote-Imitat-App verweist, nervt ganz schön.

Zu guter Letzt, auf meinem privaten PC, hat eigentlich alles funktioniert. Mit der einzigen Ausnahme, dass mein Antivirus deinstalliert wurde. Warum auch nicht. Immerhin hat es bei den anderen beiden Rechnen ja auch ohne Deinstallation direkt einfach funktioniert, da kann man ja hier mal eine Ausnahme machen.

Soweit dazu. Bisher macht Windows 10 einen Ok-Eindruck. Nur wenig nervt, nur wenig scheint echt verbessert, nur wenig scheint verschlechtert. Das wird schon, aber ein echtes Powerfeature vermisse ich.

P.S.: Und Microsoft kann nicht zählen! vgl: Visual Studio 14

Ich als Visualisierer wissenschaftlicher Datensätze kriege diese häufig in Form von beliebig strukturierten Textdateien. An sich nicht schlimm. Der erste Schritt ist dann eben eine initiale Konvertierung in ein schnelles Binärformat für die visuelle Analyse. Doch damit stehe ich immer wieder vor dem Problem eine 11 Gigabyte Textdatei verstehen zu müssen (Ich übertreibe nicht!). Da die Datei ja doch recht konsistent ist, geht es im Endeffekt immer nur um die ersten paar Zeilen und die letzten paar Zeilen. Dazwischen sieht ja doch meist alles gleich aus. Was ich also brauch sind die üblichen Linux-Befehle „head“ und „tail“. Nun bin ich aber ein Windows-Benutzer. Was nun also? Die Powershell hat die Antwort:

gc log.txt | select -first 10 # head
gc log.txt | select -last 10 # tail

Gefunden hab ich das auf: http://stackoverflow.com/a/9682594 (wo auch sonst)

Zumindest diese Variante von „head“ ist ausreichend schnell für meine Dateien. Ich bin zufrieden.

Leider ist der Eintrag nur auf Amerikanisches Englisch verfügbar. Der Inhalt wird unten in einer verfügbaren Sprache angezeigt. Klicken Sie auf den Link, um die aktuelle Sprache zu ändern.

We updated MegaMol to use cmake to build on Linux OS. This greatly improved the build process on Linux. But this also makes some more uncommon scenarios difficult to realize. For example, cmake usually automatically detects required dependencies. But, in some scenarios you need to override this magic.

In this article I show how to compile a second MegaMol on a system on which a MegaMol already has been compiled and installed. This is useful when working with experimental versions.

VISlib and visglut

First off you build the visglut the usual way. I assume here, that the installed MegaMol uses a different visglut as the one you want to build now:

mkdir megamol_x2
cd megamol_x2
svn co https://svn.vis.uni-stuttgart.de/utilities/visglut/tags/forMegaMol11 visglut
cd visglut/build_linux_make
make

If everything worked you can find the following files:

in megamol_x1/visglut/include:

GL/freeglut_ext.h
GL/freeglut.h
GL/freeglut_std.h
GL/glut.h
visglut.h
visglutversion.h

and in megamol_x2/visglut/lib:

libvisglut64.a
libvisglut64d.a

If so, let’s continue with the VISlib:

cd megamol_x2
svn co https://svn.vis.uni-stuttgart.de/utilities/vislib/tags/release_2_0 vislib
cd vislib

Now, there is the first action which is different from the default build process. As usual we will use the script cmake_build.sh. This script, however, per default registers the build directories in the cmake package registry. This enables cmake to find this package in its build trees. In this scenario, however, we do not want this special build to be automatically found, because we do not want to get in the way of our system-installed MegaMol. We thus deactivate the package registry.

This command configures and builds the VISlib, both for debug and release version:

./cmake_build.sh -dcmn

As always, if you encounter build problems due to the multi-job make, reduce the number of compile jobs:

./cmake_build.she -dcmnj 1

Note that I do not specify an install directory. I do not plan to install this special MegaMol. I just want to build, for example for a bug hunt.

MegaMolCore

It’s now time for the core.

cd megamol_x2
svn co https://svn.vis.uni-stuttgart.de/projects/megamol/core/branches/v1.1rc core
cd core

We first test the configuration by only configuring release and not building anything:

./cmake_build.sh -cv ../vislib -C -DCMAKE_DISABLE_FIND_PACKAGE_MPI=TRUE

Note that I also disabled MPI-Support here. The system I am building on has MPI installed, but I don’t want this MegaMol to use it.

The output should contain this line:

-- Found vislib: /home/sgrottel/megamol20150726/vislib/build.release/libvislib.a

This points to the right vislib, the one we specified. So all is well. We can build MegaMol, again without registering it’s build trees in the cmake package repository:

./cmake_build.sh -dcmnv ../vislib -C -DCMAKE_DISABLE_FIND_PACKAGE_MPI=TRUE

When all worked you got yourself the binaries:

megamol_x2/core/build.debug/libMegaMolCored.so
megamol_x2/core/build.release/libMegaMolCore.so

MegaMolConsole

Get yourself a working copy of the console:

cd megamol_x2
svn co https://svn.vis.uni-stuttgart.de/projects/megamol/frontends/console/branches/v1.1rc console
cd console

Again, we test if everything works by only configuring release and not building:

./cmake_build.sh -c -f ../core

The Console does not register its build tree per default, since no other project depends on the console. So we are fine here.

The output should contain these lines:

-- Looking for MegaMolCore with hints: ../core;../core/build.release;../core/share/cmake/MegaMolCore
-- Found MegaMolCore: /home/sgrottel/megamol20150726/core/build.release/libMegaMolCore.so
-- MegaMolCore suggests vislib at: /home/sgrottel/megamol20150726/vislib/build.release
-- MegaMolCore suggests install prefix: /usr/local
-- Using MegaMolCore install prefix
-- Found vislib: /home/sgrottel/megamol20150726/vislib/build.release/libvislib.a
-- Found AntTweakBar: /home/sgrottel/AntTweakBar/lib/libAntTweakBar.so
-- Found visglut: /home/sgrottel/megamol20150726/visglut/lib/libvisglut64.a

If the directories for other libraries are wrong, for example the AntTweakBar or the visglut use the cmake-typical DIR variable to give a search hint. Remember, relative paths might be confusion. Better use absolute paths. I don’t:

./cmake_build.sh -c -f ../core -C -Dvisglut_DIR=~/megamol20150709/visglut -C -DAntTweakBar_DIR=../../AntTweakBar

But in my case the cmake-magic worked fine in the first place. So, I configure both build types again:

./cmake_build.sh -dc -f ../core

Double check the output. Make sure the core, the vislib and the visglut are found in all the right places. If they are, built it:

./cmake_build.sh -dm

At this point you can quickly test your MegaMol. First open the megamol.cfg configuration file in a text editor and adjust the paths in there to yours. Then run MegaMol:

cd build.release
./MegaMolCon

If this seems ok, and if you have a local graphics card you can run the demo renderer:

./MegaMolCon -i demospheres s

Some MegaMol Plugin

Finally we need a plugin. I go for the mmstd_moldyn:

cd megamol_x2
svn co https://svn.vis.uni-stuttgart.de/projects/megamol/plugins/mmstd_moldyn/branches/v1.1rc mmstd_moldyn
cd mmstd_moldyn

The process is now exactly the same as with the console:

./cmake_build.sh -dcf ../core

The double check the directories for the core and the VISlib. If they are good, build the plugin:

./cmake_build.sh -dm

To test this plugin we go back to the console, and adjust the config file to load the plugin:

cd megamol_x2/console/build.release

Include the following lines in the config file. Obviously adjust the paths to what you need:

<plugin path="/home/dude/megamol_x2/mmstd_moldyn/build.release" name="mmstd_moldyn.mmplg" action="include" />
<shaderdir path="/home/dude/megamol_x2/mmstd_moldyn/Shaders" />

If you now run MegaMol it will try to load your plugin and will report it. The output console should contain something like:

200|Plugin mmstd_moldyn loaded: 11 Modules, 0 Calls
200|Plugin "mmstd_moldyn" (/home/sgrottel/megamol20150726/mmstd_moldyn/build.release/mmstd_moldyn.mmplg) loaded: 11 Modules, 0 Calls registered

And that’s it.

Es ist wieder soweit. Kommende Woche sind die letzten Vorlesungen. Obwohl ich gerne Vorlesungen halte, dabei meinen Spaß habe und ich glaube, dass ich auch gut darin bin, trotzdem freue ich mich darauf, wenn der Teil meiner Arbeit mal wieder abgehakt ist und ich mich um die ganzen anderen Baustellen kümmern kann. Von denen gibt es ja auch noch genug. Z.B. den nächsten MegaMol-Release oder die aktuellen Paper-Projekte; nicht zu vergessen, die aktuellen Weiterentwicklungen in MegaMol für zukünftige Projekte.

Gestern wollte ich mal wieder einen „Nichts Neues“-Post schreiben, ganz nach meinem üblichen Plan. Allerdings konnte ich mich aus irgendwelchen für mich absolut nicht nachvollziehbaren Gründen nicht in mein Admin-Dashboard einloggen. Ich hab alles im Login-Trouble-Shooting-Guide durchprobiert, bis ich am „If everything else fails…“ angekommen war. Zum Glück, war es dann spät und ich hatte keine Lust mehr irgendwas anderes zu probieren.

Und heute, funktioniert wieder alles fein. … WTF …

Warum ist Software so unzuverlässig, und warum schlägt heutzutage Software immer so still und unnachvollziehbar fehl?