Ein Fazit und eine kurze Zusammenfassung zu Anfang.

Um die 100 C++ Entwickler kamen dieses Jahr nach Garching zur ADC++, die von ppdev AG (Johannes Preishuber) mit einigen Sponsoren veranstaltet wurden.

Nach Johannnes Preishuber hat der Fußball (Champions League Halbfinale Bayern München – Real Madrid) einen kleinen Strich durch die Veranstaltung gemacht. Es war für viele Interessierte kein Hotelzimmer mehr in der Nähe verfügbar. Dadurch war die Teilnehmerzahl leider nur um die 100.

Lohnend war der Ausflug auf die Konferenz in jedem Fall. Zum einen um etwas über den Tellerrand zu schauen. Zum anderen um zwischen den Sessions auch Kontakte zu pflegen und auch fachlich mal zu erkunden was andere machen und wie andere etwas machen. Für mich sind das immer wieder kleine Aha-Erlebnisse.
Ich bin vielleicht etwas verwöhnt von den beiden ADC’s (2011 Prien am Chiemsee, 2012 Ohlstadt im Zugspitzland). In Bad Aibling 2013 war ich leider nicht dabei.

Die Location war nicht so malerisch. Der Konferenzort funktional, aber nicht ganz so gemütlich und schön.
Toll war in jedem Fall wieder die Abendveranstaltung, die in der Flugzeugwerft Schleißheim in toller Atmosphäre stattfand. Hier  lässt sich ppdev AG immer etwas Tolles einfallen. Mein Lob dafür!

Hier ein kleiner Bericht über die Sessions an denen ich teilgenommen habe.Je nach Struktur und Inhalt kann ich mehr oderweniger wiedergeben. Sollte ich Dinge falsch verstanden haben oder falsch wiedergeben, bitte ich das zu entschuldigen. Ich hoffe jedenfalls hier keine gravierenden Fehler in diesem Bericht gemacht zu haben.

Tag 1

Keynote
(Tarek Madkour)

Die Keynote wurde vom Produktmanager Tarek Madkour von Microsoft gehalten, der Nachfolger von Steve Teixeira in der C++ Produktgruppe.
Die Keynote war eine kleine Werbeveranstaltung für VisualStudio, was aber nicht verwundert, denn als C++ Entwickler für Microsoft Produkte ist VisualStudio für die meisten der Anwesenden hier das primäre Arbeitswerkzeug.
In einem kleinen Tiefflug ging es über die Konzepte wie VisualStudio über Major Releases, Updates und CTPs an den Entwickler gebracht wird. Dabei wurden auch der aktuelle Stand und kommende Features genannt. Insbesondere was Leistungsmerkmale aus C++14 betrifft.

Altbekannte Stichworte wie Perfomance/Speed fanden Raum. Anschließend zeigte Tarek Madkour einige neue Features im VisualStudio. Ich war selbst erstaunt, dass auch VisualStudio selbst Funktionen integriert, die ich immer nur mit VisualAssist von WholeTomato in Verbindung gebracht habe.
Erwähnt wurden auch anstehenden Änderungen im Linker, die mit VS-2013 Update 2 kommen werden. Tarek Madkour versprach bei Standard Projekten eine Zeitersparnis von 50% im Linkvorgang.

Auch ein Thema in der Zukunft bei Microsoft wird Cross Platform Development sein. D.h. es wird auch bei Microsoft darüber nachgedacht, wie Entwickler mit VisualStudio evtl. in der Zukunft eine Entwicklungsumgebung haben für Windows, Windows Apps, iOS und Android. Ich bin gespannt wie das aussehen kann.

Interessant Randbemerkung für mich:
Eine Umfrage welche Versionen aktuell benutzt werden zeigte, dass doch ein Großteil der Entwickler auch die neuen Versionen nutzt und auch die Möglichkeit Updates.

Bei dieser Frage war es das erste Jahr bei dem sich bei VC6 niemand mehr gemeldet hat. Aber vielleicht hat man sich nur nicht getraut 😉 . Erstaunlich viele Teilnehmer verwenden tatsächlich aktuelle VisualStudio Versionen mit den entsprechenden aktuellen Updates.

Refactoring- Cause it pays off in the long run
(Hadi Hariri)

Ein sehr kurzweiliger Vortrag, der professionell und sehr humorvoll vorgetragen wurde. Refactoring ist für viele Entwickler oft ein „nice to have“. Das Refactoring ein Plus an Code-Qualität, besserem Verständnis und vor allem Kostenreduktion bedeutet.

Ein Verweis das „Unit-Testings“ Pflicht ist wurde nicht nur einmal im Vortrag erwähnt. Und das leuchtet ein, aber es ist wie mit dem Rauchen: „Wir wissen, dass es schlecht ist, aber viele tun es trotzdem!“, „Wir wissen auch das Unit-Testing auch C++ Projekten gut tut, aber wir tun es dennoch nicht konsequent!“.
Es ist eben oft nicht einfach unseren Managern den kostenreduzierenden Aspekt für Unit Testing und Refactoring klar zu machen.

Sprechende gute Beispiele und passend eingebaute Scherze ließen die Zeit schnell vergehen.
Leider geriet der Vortrag am Ende doch etwas zu einer Eigenwerbung (Resharper, und neue C++ Tools, die noch im Beta Stadium sind).

PreDebugging
(Matthias Wedemeyer)

Leider muss ich sagen, dass mich dieser Vortrag etwas enttäuscht hat. Viel kann ich dazu nicht wiedergeben. Aber aus meiner Erfahrung heraus, war ein Großteil der gezeigten Tools und Vorgehensweisen überflüssig oder das Ergebnis einfacher erreichen. Das wurde mir auch auf Rückfrage im Vortrag bestätigt.

(Persönliche Anmkerung; Ich empfinde es in der Zeit von PDB Dateien anachronistisch noch Map-Dateien zu verwenden.
Dazu ist nur etwas „interne Buchhaltung“ nötig ausgelieferte Binaries immer mit PDB Datei in einem Archiv abzulegen. Warum so etwas thematisieren, in der Zeit von virtuellen Maschinen in der man jede „alte Entwicklungsumgebung“ jederzeit wiederherstellen kann.

Auf die Minidumps wurde meines Erachtens viel zu kurz eingegangen. Minidumps liefern schnell und einfach eine Vielzahl an mehr Daten, die hier mühsam einzeln zusammen getragen wurden.
Auch ist ein Minidump in einer Unhandled Exception immer günstiger und effektiver ist als eine „Selbstanalyse“.

Es ist vielleicht interessant zu wissen wo diese Informationen für das Post-Mortem-Debugging her kommen, aber für mich erscheint es tausend Mal einfacher einen Minidump zu schreiben und diesen in mein VisualStudio zu laden oder in den WinDbg. Zudem auch das Volumen der Daten und die Auswertungsmöglichkeiten mit einem Minidump effektiver sind als Textdateien.

Minidumps lassen sich immer ohne Problem jederzeit schreiben. Funktionieren, für 64bit und 32bit Anwendungen und liefern je nach Typ eine Vielzahl an Informationen mehr, die hier nicht mal angesprochen wurden.
Ich kann allen Entwicklern nur raten sich mit Minidumps auseinander zu setzen.(Siehe auch Session von Jochen Kalmbach)).

Creating Windows 8.1 Phone and Store Apps
(Tarek Madkour)

Ein Vortrag, der mich einfach interessiert hat, weil er ich selbst mal über meinen Tellerrand schauen wollte. Denn wie Tarek Madkour gleich zu Anfang des Vortrages zeigte, so verändert sich die Anwendersicht auf Informationen, der Zugriff auf Informationen. Wo früher ein PC das Zentrum war, so wird immer mehr Information für mobile Geräte zugänglich.

Tarek ging auf die aktuelle Marktverteilung der Handytechnologien ein (2014 für Android 68,5%, iOS 19,1% und Windows 10,1%).
Detailliert erläuterte die Technologien für Windows Apps und Windows Phone Apps. Insbesondere welche UI Techniken der Entwickler wählen kann (DirectX, XAML mit C# oder C++, HTML5/JS).

An einem Beispiel zeigte wie man eine Universal App baut, die also auf beiden Windows App Plattformen läuft (WindowsApp und WindowsPhoneApp). Eigentlich wird hier nicht eine Anwendung gebaut, sondern VisualStudio erzeugt eine Windows App  eine Windows Phone App und dazu ein drittes Projekt, das Code enthält, den beide zuvor genannten Objekte benutzen. Defakto ist das Shared Projekt nur ein Container für gemeinsam genutzte Sourcen und dieses Projekt hat keine binäre Ausgabe. Diese Shared-Code Projekte können aber dennoch alle Source Typen (CPP, C#, PNGs und andere enthalten). Innerhalb des Shared Codes können auch #ifdef‘s verwendet werden die wieder speziell auf ein Target abzielen. Weiterhin gibt es auch hier durch Intellisense entsprechende Unterstützung, was möglich ist und was nicht.

Das Konzept dieser Shared-Projekts lässt sich übrigens auch in anderen Projekten nutzen.
In Zukunft soll diese Grenze und Aufteilung in zwei Anwendungstypen und zwei Stores zusammenwachsen so zumindest ist dies das große Ziel am Horizont.

In einem zweiten Beispiel zeigte er wie man aus einer WindowsApp zusätzlich eine WindowsPhone App baut.

Rich Client migration from MFC to C++11 & XAML Real live Scenarios
(Cosmin Dumitru)

Cosmin Dumitru ging zuallererst auf den Status Quo ein. D.h. es wird weiter MFC geben (stand VS-2013), es wird Bugfixes geben was ATL und MFC betrifft. Dies ist angekündigt und bekannt. Was aber weiter mit der MFC und ATL passiert weiß niemand (Persönliche Anmerkung: Auch die nächsten VisualStudio Versionen werden ATL und MFC enthalten, was aber nicht heißt, dass wir auf große Neuerungen hoffen können,  es ist mit Sicherheit nicht zu erwarten, dass die MFC oder die MFC deprecated wird.)

Bei einer kurzen Umfrage ergab in dieser Session, dass mindestens 2/3 der anwesenden ca. 70 Entwickler noch existierende MFC Anwendungen haben,  die in Produktion laufen und auf absehbare Zeit nicht legacy werden.

In den Migrationspfaden ist es teilweise möglich fast alle Codeformen in WindowsApps zu übernehmen.
(Persönliche Anmerkung: Da aber die MFC extrem an die Windows UI (GDI) und andere Technologien (COM) gebunden ist, ist dies für die MFC einfach nicht möglich. Wäre die MFC modularer gebaut worden, gäbe es auch hier Wege.)

Ein Weg aus dem Dilemma kann es sein, Anwendungen zu zerlegen, so dass man sich von der MFC UI trennt und andere Teile die in C++ (neutral) entwickelt wurden übernimmt. Es wurde hier etwas viel  auf Pattern eingegangen die es möglich machen die Anwendung neu zu entwerfen.
(Persönliche Anmerkung: Grundsätzlich ist es sowieso nicht möglich eine Anwendung ohne gutes Design in funktionierende neue Schichten zu zerlegen.).

Leider war die Session Cosmin Dumitrus nicht ganz flüssig und ich konnte teilweise dem Projekt etwas schwer folgen. Geschuldet mag dies zum Teil durch eine technische Panne auf dem Rechner von Cosmin Dumitru sein.

Als Kritik muss ich leider sagen, dass es nicht ohne weiteres möglich ist ein MVVM Pattern auf einen existierenden Fat-Client anzuwenden. Wenn Fat-Clients so konzipiert wären, hätten die Entwickler vermutlich schon andere Wege (Web-Oberfläche, Windows-Forms) gefunden eine Migration zu schaffen.

Abendveranstaltung und FAQ im Flugzeugmuseum

In tollem Ambiente in der Flugzeug Werft in Schleißheim hatten wir auch noch einen tollen Abend in  netter Gemeinschaft und gutem Essen. Etwas später fand noch eine FAQ statt mit 5 der aktuell anwesenden Referenten (Bayern lag zu diesem Zeitpunkt schon 0:3 zurück). Die FAQ war ein leichtes Spiel für alle Beteiligten. Es gab einfach keine heißen wirklich Themen. Insofern war keiner der 5 „Spezialisten“ wirklich gefordert.

Aber doch ergab sich eine interessante Fragen und auch Neuigkeit.
Auf eine Frage aus dem Plenum, was als nächste UI für Desktop Anwendungen zu sehen ist, antwortete Tarek Madkour mit folgender Antwort (sinngemäß, wie ich es gehört habe):
„We have had Win32 and MFC forever but we are talking at Microsoft about this in the last weeks. We will see the answer in the next month.“

Das bedeutet letzten Endes, dass wir tatsächlich noch einmal auf eine Antwort auf die UI-Frage von Microsoft bekommen werden, nachdem WPF, Windows Forms, MFC und Windows API letzten Endes keine aktuell zufriedenstellenden Antworten für uns als Entwickler bieten. Was nicht heißt, dass nicht eine der bisherigen Antworten (WPF, XAML) als endgültige Antwort fest geklopft werden.
Ich bin gespannt was sich hinter diesen Sätzen verbirgt und ich bin gespannt wie lang die Halbwertzeit dieser Technologie dann sein wird.

Ein Aspekt der auch an unserem Tisch in den Gesprächen thematisiert wurde, war, dass sich viele Entwickler bei allen guten neuen Entwicklungen des Standards auch die Integration von Graphik und GUI wünschen. Michael Wong konnte hier natürlich nur sagen, dass er den Wunsch gehört hat.

Auch eine Frage der Integration von CMake in VisualStudio traf auf offene Ohren. Tarek Madkour antwortete, dass über Multiplattform Konzept in VisualStudio nachgedacht wird (s.o. Keynote). D.h. nicht nur, dass in VS vielleicht irgendwann für Android oder iOS Anwendungen entwickelt werden könnten. Dies schließt nicht nur Gedanken über den Compiler ein, sondern eben auch wie ein Build für andere Plattformen erfolgen kann und hier findet natürlich auch CMake einen Platz in den Überlegungen.

Es wurden noch andere Fragen gestellt über manches Thema, aber hier gebe ich auch zu, dass mein Interesse und Auffassungsvermögen auch beschränkt ist und manche Gespräche am Tisch auch interessant waren. 🙂

Tag 2

Keynote: Modern, MobileApps forAndroid and iOS with C++
(John Thomas)

(Persönliche Anmerkung: Gleich auffallend, dass hier Windows Apps nicht genannt werden 🙂 .)

Nach einer Darstellung der eigenen Geschichte und der von Embarcadero (Borland). Er zeigte, dass in der Vergangenheit der Markt hauptsächlich von Intel und Windows dominiert wurde. Der Markt ändert sich rapide. Betriebssysteme iOS und Android verdrängen Palm, RIM, Symbian und Mobile Phone. Das Handy wird zum primären aktuellen Gerät, das den Anwender in seinem täglichen Handeln begleitet. Die Anteile von Tablets werden gegenüber Notebooks immer größer.

Und es ist zu erwarten, dass es noch weitaus mehr Intelligente Geräte geben wird (Tuner, Fernseher, Kühlschränke).
Somit werden Smartphones und Tablets mit Ihren Oberflächen dominierende Geräte im Alltag und haben den PC und den Laptop schon längst in Zahlen verdrängt.

Das Problem sind die vielen Arten von Geräten, für die nun Entwickler Software entwickeln müssen. Das ist eine Möglichkeit und Chance, aber auch eine „Bedrohung“.
Nach einer Umfrage wurden 85% der Windowsentwickler bereits mit Anforderungen für mobile Geräte konfrontiert. 58% entwickeln bereits für mobile Geräte. 43% Replizieren bestehende Software für Mobile Geräte. Nur 15% haben keine Anforderung für mobile Geräte.

Aber das ist kein Wechsel der Zielplattform ausschließlich zu mobilen Geräten, den 95% der Entwickler beabsichtigen bestehend Windows Desktop Software weiter zu entwickeln. Apps sind also nicht die primäre Form der neuen Software Welt. Sie sind nur eine neue Darstellungsform.

Die hier angefragten Plattformen waren (bei Mehrfachnennung) 83% Android, 67% iOS, Windows Phone 33%, 17% WindowsRT.
85% sehen in Nativen Apps die Lösung. In einem kurzen Exkurs wurde erklärt, dass Facebook auch mitseiner App mit HTML5 und Javascript begonnen hat, aber aufgrund mangelnder Performance, eine Kehrtwende zurück auf native Apps gemacht hat.
74% aller App Entwickler haben Probleme mit HTLM5 und Javascript. Das reicht von Problemen über Performance bis zum Zugriff auf spezielle Gerätefunktionen.

C++ ist eine gute Sprache, leidet aber daran, dass es keinen Standard für UIs gibt.
(Persönliche Anmerkung ; Ein Thema, dass in der Abendveranstaltung an unserem Tisch immer wieder diskutiert und besprochen wurde).

Native Apps sind Antworten, auf die Wünsche von Anwendern: Performance, intelligente effektive Eingabe, Sicherheit und die Integration anderer Dienste. Ideal wäre also eine Multi-Device Application Platform, bestehend aus Client UI, Datenbank, Middleware und Web/Cloudservices.
Wie erwartet kommt nun der „Werbeblock“ 😉 .  Embarcadero liefert für alle Bereiche entsprechende Technologien(FMX, InterBase, DataSnap/FireDac, RestFM/BaasFM).

Der Anteil an C++ wird nach John Thomas weiter zu nehmen. Java hat ein Standing, aber es ist eben Interpretiert und wenn es um eine bessere User Experience und mehr Hardwarenähe geht, dann geht kein Weg an C++ vorbei.

Ich spare mir hier die Tour durch die einzelnen Technologiebereiche.
Wir stehen unzweifelhaft für einer neuen noch nie dagewesenen Vielfalt von Geräten und Möglichkeiten der Nutzung von Software und Diensten in unserem Alltag.

Debugging Tools for Windows
(Jochen Kalmbach)

Auf diese Session von meinem langjährigen Mit-MVP habe ich mich gefreut. Und ich halte dieses Thema für so wichtig, dass jeder Entwickler die hier behandelten Themen zumindest kennen sollte.

Es ging grundsätzlich in einem Schnelldurchgang durch fast alle Werkzeuge aus den Debugging Tools für Windows.
Die Debugging Tools sind mittlerweile sowohl Teil des WDK und SDK.

  • WinDbg ist der Hauptdebugger neben den weniger relevanten cdb, ntsd und kd. WinDbgverfügt über sehr viele Extensions, die weit über Leistung des Debuggers in VisualStudio hinaus gehen.
  • Gflags, sehr nützliches Tool, dass auch mit dem AppplicationVerifier verwendet wird. Es setzt die OS-Kernel Flags)
  • Die Palette der Symbolstore Tools: symstore, symcheck, dbh
  • Umdh (Memory Leak Analyse)
  • Und einiges andere zusätzlichen Hilfsmitteln

Bei WinDbg ist der große Vorteil, dass er nicht installiert werden muss. Xcopy Deployment oder starten vom USB Stick ist also möglich. Dieser Debugger arbeitet immer, auch wenn andere Debugger versagen. WinDbg kann auch über Skripte automatisiert werden.

Es folgt ein kurzer Überblick über die Befehle und Funktionsweisen. WinDbg Befehle fallen in drei Kategorien. Normale Befehle (beginnen mit einem Buchstaben), Meta-Befehle (beginnen mit einem Punkt), Extension-Commands (beginnen mit einem ! Ausrufezeichen).
Es folgen weitere direkte Anwendungsbeispiele wie die Dump-Analyse. Stichworte wie WER, LocalDumps, Dumperzeugung mit dem Taskmanager etc. werden genannt und in kleinen Beispielen gezeigt.

Um natürlich passende Symboldateien zu haben benötigt man zu dem entsprechenden Build auch die entsprechenden PDB Dateien. Entsprechend stellte Jochen Kalmbach den SymbolStore (Symstore) vor. Vor allem nützlich ist auch die Möglichkeit den Symbolstore an ein bestehendes Source Control System anbinden. Dann kann WinDbg und VisualStudio sogar den passenden Sourcecode aus dem Control System laden.

Weiter ging es mit einem schnellen Überblick über spezielle Befehl für die Leaksuche in WinDbg.
Anschließend kam das kleine „Super-Helferlein“ (meine Wortschöpfung) an die Reihe.  Es wurde gezeigt wie man mit GFLAGS Heap Defekte finden kann und auch eine Leak Suche möglich wird.

Aufgrund der fortgeschrittenen Zeit wurde am Ende noch auf Möglichkeiten der Automatisierung mit cdb eingegangen.
Hier wurde ein Thema behandelt bei dem jeder Entwickler zumindest alle die hier genannten Möglichkeiten kennen sollte.

Even simpler C++ with C++14
(Peter Sommerlad)

Hier hat mich gereizt einen Überblick von C++14 geboten zu bekommen. Zu Anfang gab es seine kurze Umfrage wer bereits C++11 Features benutzt, nach meiner Schätzung waren das über 50%. C++14 nutzte von den anwesenden noch niemand. Von den Anwesenden waren 100% der Anwesenden regelmäßige Nutzer von C++.

Über einen kleinen Einstieg mit einem Beispiel des kleinem Einmaleins und der Grundlagen für das „Comeback“ von C++ ging es mit einer Zusammenfassung von C++11 weiter (auto, uniforme Initialisierung, Lamdas, Move-semantics, decltype, … etc.)
Weiter ging der Vortrag über Dinge, die wir mit C++ nicht mehr benötigen oder brauchen (Speichermanagement new/delete und andere).
Dann ging es in die neuen C++14. Nach Herb Sutter ist C++14 ein „Bug fix release“.

Leider muss ich sagen, dass ich hier in meinem Blog kaum darstellen kann was hier alles angesprochen wurde und wie es begründet wurde. Aber ich habe gemerkt, dass ich mich doch über einige neue Aspekte in C++14 dringend nachlesen muss, insbesondere die Regeln für die Move-Semantic und die Aspekte der Kopierbarkeit von Objekten bei existierenden virtuellem Destruktor; genauso wie die neuen Erweiterungen und Neuerungen von auto, „referencyness“ (J.Wakely) und einiges andere.

Insgesamt ein Vortrag, der mich teilweise herausgefordert hat, bei der Menge an Stoff, die hier herüber gebracht wurde und einen fast erschlagen hat.

Funktionale Programmierung in C++
(Rainer Grimm)

Diese Session war mehr oder weniger ein theoretischer Ausflug.
Es war interessant abstrakte Konzepte der Funktionalen Programmierung kennen zu lernen. Ganz ist mir der Nutzen in meiner „C++-Welt“ nicht aufgegangen, aber die Paradigmen kennen zu lernen und damit auch gedanklich zu spielen war relativ nett.

Allerdings fällt es mir zu dieser Session wirklich schwer Inhalte wiederzugeben. Auch hier mag mein interner Füllungsgrad bei dieser Konferenz einfach schon das Maximum erreicht haben. 🙂

Fazit

Es hat Spaß gemacht bekannte Gesichter wieder mal im Real Life zu sehen und auch neue Bekanntschaften zu machen. Und es hätte noch mehr Spaß gemacht wenn mein Zug (Deutsche Bahn) nicht schon bei der Abfahrt 20min. Verspätung gehabt hätte. Aber dafür kann ja niemand bei der Konferenz etwas…

Letzte Anmerkung:

Sollten mir bei der Wiedergabe der Inhalte Fehler unterlaufen sein, so sind die einzig und alleine mir zuzuschreiben und keinem der Referenten. Ich bitte dies zu entschuldigen und werde mich um Korrektur bemühen, sofern mir solche Fehler auch bekannt gemacht werden.