Wie immer am Anfang des Berichts kurz der Hinweis, dass alle Vorträge, Quelltexte, usw. - soweit
vorhanden bzw. mir bekannt - auf der Vortrags-Übersichts-Seite
verlinkt sind.
Diesmalige fand das C++ User-Treffen wiedermal bei NI (National Instruments) statt, und trotz Sommers und Sommerferien waren 37 C++ Interessierte gekommen um den Abend mit C++ zu verbringen.
Foto 01: C++ User-Treffen Aachen 14.7.2016
NI hatte sich wieder nicht lumpen lassen und verwöhnte uns mit einer reichen Getränke- und Essensauswahl. Vielen Dank wiedermal von hier für die gute Bewirtung und auch das schöne Ambiente.
Foto 02: C++ User-Treffen Aachen 14.7.2016
Foto 03: C++ User-Treffen Aachen 14.7.2016
Der Start des Abends verzögerte sich aufgrund technischer Probleme etwas. Die Anschlüsse der Laptops der Vortragenden (Mirco und Edda) und die des Beamers wollten einfach nicht zueinander finden. Zum Glück konnte Sven helfen und stellte beiden sein Laptop zur Verfügung. Leider konnte Mirco so seine Live-Coding-Demos nicht vorführen, und bei Edda gab es Anzeige-Probleme mit den Grafiken, die sie dann aber in einem anderen Programm einzeln öffnen und zeigen konnte.
Foto 04: C++ User-Treffen Aachen 14.7.2016 - technische Probleme
Mit etwas Verspätung startete der Abend dann mit Mirco Müller und dem Thema "Open-Source Software mit Schwerpunkt C++". Als erstes stellte Mirco die Idee von Open-Source Software vor und grenzte sie z.B. von freier aber Closed-Software ab - und räumte auch mit dem Vorurteil auf das Open-Source immer "umsonst" meint. Außerdem stellte er dar, wieviel Open-Source Software auf C++ beruht, die wir alle täglich nutzen und unsere Arbeit stark erleichtern.
Foto 05: Mirco Müller mit "Open-Source Software"
Danach ging er auf mehrere Open-Source Produkte näher ein. Da Mirco aus dem Grafik-Umfeld kommt, drehten sich diese Beispiele natürlich um Grafik. Ein Produkt (dessen Namen ich leider vergessen habe) war für Animationen und Seequenzen in Filmen zuständig - und Mirco zeigte einen Trailer eines hiermit erstellten Films. Ein zweiter größerer Block drehte sich um "libcgal" - The Computational Geometry Algorithms Library. Hier hätte Mirco gerne seine Live-Coding-Demos vorgestellt - was aufgrund der technischen Probleme ja nicht funktionierte. Aber nicht schlimm - Mirco wird "libcgal" zu einem späteren Zeitpunkt in einem eigenen Vortrag noch mal detailliert vorstellen. Unterm Strich war der Vortrag ein interessanter Überblick über zum Teil wichtige und zum Teil unbekannte aber gute C++ Open-Source Software - jeder konnte sicherlich die ein oder andere Idee mitnehmen.
Nach dieser Open-Source Einführung nahm der zweite Vortrag von Edda Nourbakhsh das Thema auf und stellte eine Problem-Lösung auf Basis der Open-Source C++ Bibliothek "Boost" vor: "Intraprocess mit Boost".
Foto 06: Edda Nourbakhsh mit "Intraprocess mit Boost"
Zuerst motivierte Edda das Problem - sie hatte zwei DLLs in einem Prozess geladen und musste diese DLLs miteinander kommunizieren lassen - obwohl die DLL einander nicht kannten. Weitere Nebenbedingungen waren, dass der eigentlich Prozess in Python geschrieben war und nur die eine DLL Nachrichten auf einen Bus legen durfte - die andere dies aber auch durchführen musste.
Foto 07: "Intraprocess mit Boost"
Edda zeigte dann ihre Lösung mit "Boost.Interprocess" für dieses Problem und stieg dann detailliert in den Quelltext ein. Die geplante Live-Debugging-Session musste dann aufgrund des fremden Laptops zwar ausfallen - aber auch so war der Lösungs-Code wohl für jeden verständlich. Die Präsentation und die Sourcen finden alle Interessierten hier als Zip-Datei.
Den dritten Vortrag hatte dann Holger Naussed übernommen, und er redete über "Reguläre Ausdrücke in C++11". Wobei er eigentlich nicht nur reguläre Ausdrücke in C++11 vorstellte - sondern er verglich für ein konkretes Problem ("Flugnummern" Zerlegung) mehrere Lösungen - mit C++11, mit Boost, mit einer RegEx C-Bibliothek und einem direkten ungeprüften Zugriff auf Sub-Blöcke des Input-Strings.
Foto 08: Holger Naussed mit "Reguläre Ausdrücke in C++11"
Holger verglich die Lösungen bzgl. Quelltext-Übersichtlichkeit und -Länge, und bzgl. der Performance. Natürlich war der direkte Zugriff die schnellste Lösung - interessanter war aber die Performance der RegEx-Lösungen. Außergewöhnlich war, dass die C++11 Lib langsamer war als die Boost Implementierung, obwohl sie doch eigentlich die identische Schnittstelle haben und daher einen identischen Aufbau haben könnten. Aber man sah mal wieder - das unterschiedliche Implementierungen auch unterschiedlich performant sind. Von der Übersichtlichkeit waren bei den RegEx-Lösungen C++11 und Boost die klaren Sieger. Ein netter kleiner Vortrag von Holger - die Präsentation gibt es hier als PDF.
Nach dem dritten Vortrag war dann erstmal eine größere Pause angesagt - und die Anwesenden genossen die Getränke, das Essen und die Gespräche über die gehörten Vorträge. Ich machte mich wie immer auf die Suche nach neuen Vorträge für die kommenden Treffen...
Foto 09: C++ User-Treffen Aachen 14.7.2016
Foto 10: C++ User-Treffen Aachen 14.7.2016
Foto 11: C++ User-Treffen Aachen 14.7.2016
Foto 12: C++ User-Treffen Aachen 14.7.2016
Der Abend endete dann mit einem längeren Vortrag von Sven Johannsen über das "Google Perf-Test-Framework". Häufig möchte man einfach nur wissen, wenn man ein Problem oder eine Stück Code auf mehrere ähnliche Arten lösen kann, welches Art ist schneller - hierfür gibt das Micro-Performance Test-Framework von Google. Hiermit kann man bis auf Nano-Sekunden herunter schnell die Ausführungs-Zeiten für verschiedene Stücke Code messen bzw. vergleichen.
Foto 13: Sven Johannsen mit "Google Perf-Test-Framework"
Sven führte Stück für Stück in die Idee der Micro-Benchmarks ein. Dann zeigte er kurz, wie man mit CMake unter Linux bzw. Windows das Micro-Benchmark-Framework einbindet und danach führte er es mit vielen kleinen Beispielen vor. So ging er der Frage nach, welche Art String-Default-Argumenten zu definieren am schnellsten ist, wie sehr sich Double-Konvertierungen im Apfelmännchen bemerkbar machen, wie stark sich die Short-String-Optimierung auswirkt, und vieles mehr. Alle Beispiele zeigte er live im Code, und alternative Code-Vorschläge aus dem Publikum wurden auch noch schnell eingebaut.
Es war beeindruckend zu sehen, wie einfach Micro-Benchmarking sein kann, und wie gut und schlecht der Compiler optimieren kann. Manche Beispiele endeten mit Überraschungen - andere entsprachen den Erwartungen. Aber egal wie - das Ergebnis war fast immer eine Diskussion wert und für manchen Anwesenden eine Erleuchtung. Super spannender und super interessanter Vortrag. Alle die ihn gehört haben, werden am Wochenende mit Sicherheit micro-benchmarken - ich auf jeden Fall.
Den Vortrag von Sven findet man auf seiner Homepage, die vorgestellten Beispiele auf GitHub im Branch "demo".
Und da die Diskussion und Frage aufkam - Sven hat die Präsentation direkt in HTML mit reveal.js erstellt. In älteren Vorträgen hat er mit prez (oder hier) Markdown nach "reveal.js" übersetzt. Seine Vorträge im hellen Design wurden mit deck.js erstellt.
Den nächsten Termin, weitere Berichte und andere Informationen zu den C++ User-Treffen in Aachen finden sich auf meiner "C++ User-Treffen in Aachen" Seite.