Wilkening-Online Logo

C++ User-Treffen in Aachen am 8.1.2015



Von Detlef Wilkening

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.

Zum ersten Mal fand das C++ User-Treffen Aachen bei National Instruments (NI) statt. Und NI hatte sich nicht lumpen lassen, und ein großes Buffet für alle Teilnehmer aufgebaut - vielen Dank von hier nochmal für die echt gute Versorgung.

C++ User-Treffen Aachen 8.1.2015 - Bild 1
Foto 01: C++ User-Treffen Aachen 8.1.2015

Obwohl es kein gutes Wetter war und der Sturm Felix über die Eifel pfiff, fanden doch 29 C++ Entwickler den Weg raus in die Pascalstraße.

C++ User-Treffen Aachen 8.1.2015 - Bild 2
Foto 02: C++ User-Treffen Aachen 8.1.2015

Leider hatten wir kurzfristig das Programm etwas ändern müssen. Mirco Müller hatte am Abend vorher absagen müssen, und so standen wir ohne Hauptvortrag da. Aber alle drei Vortragenden der geplanten Lightning-Vorträge hatten am gleichen Abend noch zugesagt, ihre Vorträge aufzubohren, so daß wir diesmal nicht drei kleine und einen großen Vortrag im Programm hatten, sondern statt dessen drei mittlere.

Bevor der Abend aber mit C++ starten konnte, begrüßte Andreas Haub von National Instruments uns alle und stellte in einem kleinen 10 Minuten Vortrag Nationl Instruments vor.

C++ User-Treffen Aachen 8.1.2015 - Bild 3
Foto 03: Andreas Haub von NI bei der Begrüßung

Auf Andreas Haub folgte die mittlerweile schon traditionelle Einleitung von mir. Wichtigster Punkt war natürlich die Änderung des Programms, d.h. der Ausfall von Mirco Müller und die erweiterten Lightning-Vorträge. Danach wies ich noch auf die nächsten Veranstaltungen hin und sprach alle an, dass ich weiterhin für die nächsten Treffen Lightning- und Haupt-Vorträge suche, und doch sicher jeder was beizutragen hätte...

Den C++ Start übernahm dann Sven Johannsen mit einem Vortrag über "Qt Signal und C++11 Lambdas". Zuerst stellte er vor, wie man in Qt4 Signals und Slots nutzen musste, und warum ihm dieser Mechanismus nicht gefiel. Da er auf dem Präprozessor beruht und mit Strings arbeitet, läßt er Fehler zu die erst zur Laufzeit auffallen und dann nur schwer zu finden sind. In Qt5 hat sich der Signal Mechanismus geändert und funktioniert jetzt mit normalen C++ Mitteln und wird komplett zur Compilzeit gecheckt.

C++ User-Treffen Aachen 8.1.2015 - Bild 5
Foto 05: Sven Johannsen mit "Qt Signal und C++11 Lambdas"

Ein weiterer großer Vorteil von Qt5 gegenüber Qt4 ist, dass der neue Signal Mechanismus neben Funktionen nun auch mit "Funktions-Objekten", dem polymorphen Funktions-Wrapper "std::functional" und mit "C++11 Lambdas" umgehen kann. Gerade die neuen C++11 Lambdas hatten es Sven angetan, da sie den Code oft immens vereinfachen können. Darum erklärte er ihren Aufbau für alle Einsteiger nochmal in Ruhe und zeigte dann, wie sie sich in Qt5 in GUI-Code nutzen lassen und den Code übersichtlicher und kürzer machen.

Svens Vortrag findet sich hier als Powerpoint Präsentation. Da er mit Code-Demo fast eine Stunde dauerte, ging es danach nicht direkt weiter, sondern alle genehmigten sich eine kurze Pause - frönten den Getränken und dem Essen und diskutierten über das Gehörte. Außerdem war ich natürlich wieder unterwegs auf der Suche nach neuen Haupt- und Lightning-Vorträgen.

Werner Clemens hatte seinen Vortrag provokativ "Und die Kinder Bier holen schicken..." genannt, und spielte damit auf einen Liedtext von Funny van Dannen von 1996 an. Sein Vortrag schloß sich nahtlos an Svens Vortrag an - während dieser den Signal & Slot Mechanismus von Qt erklärt hatte, ging Werner auf speziellere Features wie "Actions" und typische Probleme & Lösungen ein.

C++ User-Treffen Aachen 8.1.2015 - Bild 6
Foto 06: Werner Clemens mit "Und die Kinder Bier holen schicken..."

Ein vorgesteltes Problem war die Aktualisierung von GUI Elementen, wenn sich Daten aufgrund von GUI Interaktionen ändern. Dies könnte natürlich mit dem Signal & Slot Mechanismus von Qt gelöst werden indem sich die GUI Elemente gegenseitig benachrichtigen. Solcher Code ist aber nur bedingt wartbar und kann zu Signal-Kaskaden führen, die nicht in den Griff zu bekommen sind. Statt dessen bietet sich hier natürliche eine Architektur an, bei der die Änderungen der Daten von den GUI Elementen überwacht wird - in Form von Observern, MVC oder auch MVVM. Werners präferierte Lösung war hier "Kinder-Arbeit".

C++ User-Treffen Aachen 8.1.2015 - Bild 7
Foto 07: Ein Blick auf die "Kinderarbeit" mit Qt

Werner stellte in Theorie und Praxis vor, wie man "Kind-Objekte" definieren kann, die man nur noch mit den Daten bzw. den Signals & Slots verbinden muss, und die dann die gesamte Arbeit machen - "Kinder-Arbeit" halt. Schön einfach wird diese Lösung in der Praxis mit Qt, da Qt die Lebensdauer von Q-Kind-Objekten automatisch verwaltet und sie mit den Eltern zusammen löscht. Werners Vortrag und seine Beispiel-Quelltexte finden sich hier auf github.

Auch Werner zeigte in seinem Vortrag viel echten Code und die daraus resultierenden GUIs. Zusammen mit einigen Diskussionen zwischendurch und hinterher dauerte auch sein "Lightning-Vortrag" ca. eine Stunde. Es war also mal Zeit für eine Pause.

Der letzte aufgebohrte "Lightning-Vortrag" kam dann von mir und handelte von SFINAE ("Substituion Failure is not an Error"). Nach nur 2 Folien hatte ich erklärt, wofür SFINAE steht, wer das Acronym erfunden hat, wo im Standard das Thema beschrieben ist (§14.8.2), und worum es sich handelt. Eigentlich war ich damit fertig - es sollte ja auch nur ein Lightning-Vortrag sein. Aber natürlich war mir klar, dass zumindest ohne einige Code-Beispiele meine Erklärung sehr abstrakt war - und darum hatte ich weitere Folien mit Code vorbereitet.

C++ User-Treffen Aachen 8.1.2015 - Bild 8
Foto 08: Detlef Wilkening mit "SFINAE"

Nach den Code-Beispielen und einigen weiteren Detail-Erklärungen war ich mit SFINAE durch. Aber natürlich stand die Frage im Raum, ist das nun nur eine Sprachmittel, damit bestehender Code nicht bricht - oder gibt es auch sinnvolle Anwendungen dafür? Und damit begann der aufgebohrte Teil meines Vortrags. Zuerst stellte ich einen Compile-Zeit-Member-Funktions-Checker vor, der auf SFINAE beruhte - und danach noch "std::enable_if", dessen Wirkung ja auch auf SFINAE basiert. Meinen Vortrag findet sich hier als Powerpoint Präsentation.

Auch mein Vortrag dauerte fast eine Stunde, und so war am Schluß der Abend mit seinen nur 3 Lightning Vorträgen doch sehr voll gewesen. Auf der anderen Seite war für jeden was dabei: Svens Vortrag adressierte mehr die Einsteiger und man konnte so problemlos Informationen und Wissen zu Qt und C++11 Lambdas mitnehmen. Werners Vortrag setzte darauf auf, und hängte irgendwann vielleicht den ein oder anderen Einsteiger ab, zeigte dafür dem erfahrenen Qt C++ Programmierer interessante Vorgehensweisen. Mein Vortrag fing sehr einfach an und erklärte für alle SFINAE - der Member-Checker mit TMP und enable_if war dann eher für den Experten - aber die Einsteiger konnten mitnehmen dass es da noch viele leistungsfähige Dinge gibt.

Trotz der späten Stunde löste sich das Treffen noch nicht direkt auf. Statt dessen wurde noch das restliche Buffet geplündert und noch weiter über die Vorträge und C++ diskutiert.

C++ User-Treffen Aachen 8.1.2015 - Bild 9
Foto 09: C++ User-Treffen Aachen 8.1.2015


C++ User-Treffen Aachen 8.1.2015 - Bild 10
Foto 10: C++ User-Treffen Aachen 8.1.2015

Die letzten Teilnehmer halfen dann noch aufräumen und kurz vor 23:00 Uhr war der Abend dann wirklich vorbei.



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.

C++ User-Treffen: