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?

Es tut unglaublich gut mal wieder eine längere Zeit am Stück nichts zu machen. Offensichtlich brauch ich das gerade.

Tatsächlich freue ich mich auch darauf nach den Feiertagen das kommende Sommersemester vorzubereiten.

WordPress immer zu aktualisieren ist irgendwie ätzend. Ich kann voll und ganz verstehen warum viele Leute ihre (nicht-privaten) Seiten nie aktualisieren. Diese Seite hier ist keine große Installation. Eine Seite, etwa ein halbes Duzend Plugins, ein Theme, fertig. Und trotzdem, heute habe ich mir den Aufwand gegönnt alle Daten und die Datenbank zu sichern und alles zu aktualisieren. Zwei Plugins haben nach dem Update nicht richtig funktioniert. Es hat mich geschlagene zwei Stunden gekostet bis wieder alles lief. Die großen Fehler waren aber nicht bei den Plugins selbst, sondern in der Art und Weise wie ich sie benutzt hatte. Sprich, es war ganz allein mein Fehler. Trotzdem, ätzend.

Sehr geehrte Damen und Herren von

Deutsche Lufthansa AG
Germanwings
Vereinigung Cockpit e.V.

ich muss nicht sehr häufig fliegen. In der letzten Zeit war jedoch ausnahmslos jeder einzelne meiner Flüge in der einen oder anderen Art durch einen Streik gefährdet oder betroffen. Daher hier mein ernst gemeinter Ratschlag:

Kriegen Sie endlich ihren Scheiß in den Griff! Diese Kindergartenstreitereien sind ja peinlich. Und schieben Sie nicht die Schuld irgendwem zu. Sie alle sind schuld. Mitleid hat keiner von Ihnen verdient. Also, reißen Sie sich endlich zusammen.

Mit freundlichen Grüßen
S. Grottel

 

Vor ein paar Wochen hatte ich über meine Erfahrung mit VirtualBox und hardwarebeschleunigtem OpenGL unter einem Gast Ubuntu geschrieben. Das hier ist eine Richtigstellung.

Das Downgrade der GuestAdditions hat zur Folge, dass der Treiber der virtualisierten Graphikkarte kein hardware-beschleunigtes OpenGL mehr nutzt, sondern nur noch den Software-Rasterisierer. Das ist also schlicht und ergreifend gar keine Lösung.

Mit den aktuellen GuestAdditions funktioniert OpenGL auch so irgendwie. Allerdings nicht besonders gut. Offensichtlich muss man nur etwas im Code sich in „Grauzonen“ bewegen und schon Platz alles (inklusive VirtualBox). Beispielsweise ist die als Paket verfügbare Freeglut in der Version 2.8 nicht benutzbar. Die macht irgendwas und stürzt dann ab. Der Release-Candidat der Freeglut in Version 3 funktioniert.

Ehrlich gesagt hab ich keine Ahnung, ob das ganze jetzt überhaupt funktioniert. Die Frameraten sind alles andere als Überzeugend. Mein Fazit: das Ganze ist einfach keine Lösung und kein Ersatz für einen echten Rechner mit echter GPU und echter Installation. Schade.

Als Multi-Plattform-C++-Entwickler hat man es nicht leicht. Das war ja der Grund für die Projekte VISlib und die inzwischen begrabene TheLib. Aber die Zeiten sind besser geworden. Der C++11-Standard bringt viele schöne und praktische Klassen mit. Das vielleicht einzige was gerade wirklich fehlt sind IPC, RPC und fundamentalerweise Sockets. Was aber z.B. sehr schön und praktisch ist sind die ganzen neuen Threading-Klassen, allen voran std::thread.

Nun bin ich meines Zeichens eigentlich Entwickler unter Windows und portiere meine Codes regelmäßig auf die anderen Plattformen (Linuxe und manchmal OS X). Entsprechend gibt es immer mal wieder kleine Startschwierigkeiten. Beispielsweise als ich mit meinem ersten Test-Programm zu std::thread zum ersten Mal unter Ubuntu kompilieren wollte bekam ich die std::exception:

Operation not permitted

Nun, offensichtlich habe ich pthread reingelinkt, weil ich sonst das Binary gar nicht gelinkt gekriegt hätte. Aber irgendwas lief trotzdem schief. Also hieß es das allmächtige Internet fragen (und natürlich bei StackOverflow raus kommen): http://stackoverflow.com/questions/9945391/stdthread-creation-throws-exception

Als Quintessenz: Mal wieder ist es eine Reihenfolge-Frage der Parameter des Gcc, ein ständiges Ärgernis in meinen Augen:

Funktioniert nicht:

g++ -std=c++0x -lpthread -o test ./test.cpp

Funktioniert:

g++ -std=c++0x -o test ./test.cpp -lpthread

Benutzer user405725 hat es schön in seinem Kommentar zusammengefasst:

You generally have to specify libraries AFTER object files or they are not pulled in.

Ok. Soweit, so gut. Und wie sieht es mit CMake aus? StackOverflow: http://stackoverflow.com/questions/1620918/cmake-and-libpthread

Die Unterschiedlichen Lösungen können sich auch hier unterschiedlich auf die Reihenfolge der Parameter im Gcc-Aufruf auswirken. Macht man es ganz formal mit find_package:

cmake_minimum_required (VERSION 2.6)
find_package (Threads)
add_executable (myapp main.cpp ...)
target_link_libraries (myapp ${CMAKE_THREAD_LIBS_INIT})

dann funktioniert alles und macht einfach alles Richtig.

Sucht man stattdessen den kurzen Dienstweg und gibt einfach die Parameter selbst an, z.B.:

SET(CMAKE_CXX_FLAGS_DEBUG "... -lpthread")
SET(CMAKE_CXX_FLAGS_RELEASE "... -lpthread")

dann hat zumindest auf meiner Installation mein Gcc wieder die Parameter in der falschen Reihenfolge bekommen und das Testprogramm hat nicht funktioniert.

Ich mag CMake. Es tut einfach was es soll. Aber man darf nicht versuchen die eigenen Ideen gegen die Strukturen und Standards von CMake durchzudrücken. Das kann zwar zu einem gewissen Grad funktionieren, aber man handelt sich jede Menge Ärger ein. Folgt man aber einfach den Vorgaben von CMake, die praktisch immer ausreichen, dann funktioniert alles wunderbar.