Die Programmiersprache C++ gehört immer noch zu den wichtigsten Programmiersprachen überhaupt. Gerade im Embedded Bereich vollzieht sich langsam die Abkehr von C zu C++ und ist dort alternativlos. Es hatte jedoch jahrelang den Anschein, als würde diese Sprache seit Jahren nicht weiterentwickelt und von den Features und Ausdrucksmöglichkeiten hinter neueren Sprachen zurückzufallen. In diesem Vortrag zeige ich an Codebeispielen, welche Revolution tatsächlich seit C++11 stattgefunden hat und dass die Sprache keinesfalls mehr mit der zu vergleichen ist, die man vielleicht vor Jahren kennen (und vielleicht hassen) gelernt hat. Die Umgestaltung der Sprache ist dabei keineswegs abgeschlossen sondern zeigt weitere, vielversprechende Konzepte am Horizont.
Typescript zur Applikationsentwicklung nutzen. Hier werden die wichtigsten Features der Sprache kurz vorgestellt und am konkreten Beispiel deren Einsatz gezeigt.
Typescript zur Applikationsentwicklung nutzen. Hier werden die wichtigsten Features der Sprache kurz vorgestellt und am konkreten Beispiel deren Einsatz gezeigt.
Clean Code ist wichtig, darin sind wir uns einig. Doch wie stellt man sicher, dass der Code sauber wird und auch sauber bleibt? Vor allem: was heißt eigentlich Sauberkeit und woran genau misst sie sich?Hendrik Lösch erklärt in seinem Vortrag verschiedene Qualitätsmetriken und wie diese mit Visual Studio geprüft werden können. Zu den betrachteten Metriken und Begriffen zählen zum Beispiel Klassiker wie Code Coverage und Lines of Code, aber auch die zyklomatische Komplexität und technische Schuld. Darüber hinaus wird der generelle Umgang mit Coding Conventions betrachtet und welche Herausforderungen sich ergeben wenn man sie in einem Unternehmen einführen möchte.
nagiosplugin - eine Python-Bibliothek für Monitoring-Plugins Christian Kauhaus
Auch wenn in der letzten Zeit sehr viel Bewegung in die Monitoring-Szene gekommen ist (#monitoringsucks etc.), werden die Platzhirsche Nagios/Icinga und ihre Standards auf absehbare Zeit nicht verschwinden. Das Nagios-Plugin-API stellt eine sehr weit verbreitete Schnittstelle zur Anbindung einzelner Checks an Monitoring-Systeme dar. Obwohl das API in den Grundzügen sehr einfach ist, ist der Programmieraufwand für vollständig konforme Plugins erstaunlich hoch.
Die nagiosplugin-Bibliothek nimmt dem Entwickler viele Details ab, so dass er sich auf den Inhalt seiner Checks konzentrieren kann. Der Vortrag führt in das Schreiben von Nagios-kompatiblen Plugins ein, zeigt den typischen Aufbau von Nagios-Plugins und das Grundprinzip eigener Plugins. Die Konfiguration und der Betrieb von Monitoring-Systemen im Großen sollen nicht thematisiert werden.
Video: http://pyvideo.org/video/1460/nagiosplugin-eine-python-bibliothek-fur-monitor
Konferenzseite: https://2012.de.pycon.org/programm/schedule/sessions/45/
Projekt-Homepage: https://projects.gocept.com/projects/nagiosplugin/wiki
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Marc Müller
DevOps als ganzheitliche Strategie geht von drei Phasen aus: Build - Measure - Learn. Die Build Phase mit der zeitnahen schnellen Realisierung, Integration und Deployment von neuen Features mit hohem Kundennutzen, haben Teams dank agiler Vorgehensmodelle mittlerweile gut im Griff. Sträflich vernachlässigt werden aber noch die essenziellen Phasen Messen und Verbessern. Viele Teams haben hier noch keine konkrete Idee, wie ein pragmatischer Messprozess aussehen kann. Der Vortrag wird sich deshalb dem Thema "Measure und Learn" aus Service- und Nutzerperspektive annehmen. Leitfragen sind bspw.: Arbeitet meine Infrastruktur noch wie geplant? Werden Dienste unbemerkt langsamer? Welche Funktionalitäten werden genutzt? Funktionieren Apps und Services überall wie geplant? Abgerundert werden die Fragen mit Demos aus AIT Projekten, bei denen u.a. das VS Last & Performance Test Framework sowie der Cloud-Dienst Application Insights neu zu einem 360° Applikationsmonitoring zusammengestellt wurden.
Im #Neuland gibt es noch heute stark in die Jahre gekommene Host- und Service-Monitoring-Lösungen, die zu den unliebsamen Langzeitbaustellen vieler Teams und Unternehmen gehören. Wer kennt es nicht, dass regelmäßige „False-Positive“-Alarme sich in Form von E-Mails oder SMS lästig bekannt machen, dass Webinterfaces schnell an ihre Grenzen stoßen, dass komplexe und benutzerfreundliche Graphen generiert werden sollen oder dass das Monitoring-Konstrukt nicht mit der großen Zahl an hippen neuen Docker-basierten Services/Checks zurechtkommt. Ganz zu schweigen von den lückenhaften oder fehlenden Programmierschnittstellen vieler Monitoring-Monolithen. In diesem Vortrag möchten wir euch eine auf Prometheus und Kubernetes basierende Musterlösung vorstellen, die eine Webapplikation über verschiedene Metriken hinweg überwacht und das DevOps-Betriebsteam zum richtigen Zeitpunkt auf konkrete Probleme aufmerksam macht.
Event: DevOpsCon, 06.12.2016
Speaker: Christoph Petrausch, inovex GmbH
Mehr Tech-Vorträge: https://www.inovex.de/de/content-pool/vortraege/
Vortrag der OOP 2014
Überblick über die Vorteile der Programmiersprache Go für skalierbare Anwendungen sowie ein Einblick in hierbei zu beachtende Probleme und ihre Lösung.
Go ist die Sprache Nummer 1 für cloudnative Entwicklung. Der Beweis: 19 von 25 Projekten der Cloud Native Computing Foundation im höchsten Reifegrad nutzen Go, darunter Kubernetes und Docker. Aber was macht Go interessant für Java oder .NET-Entwickler? Go ist durch und durch auf Nebenläufigkeit und Parallelisierung ausgelegt. Außerdem hat Go ein statisches Typsystem, eine moderne, mächtige Standardbibliothek und ist rasend schnell. Aber vor allem: Go macht Spaß. Mit einfachen praktischen Beispielen lernt ihr mit Go produktiv zu entwickeln. Wir beginnen mit dem Hello World. Dann ein kleines Kommandozeilen Tool und eine einfache Webanwendung. Dazu nutzen wir überwiegend die Standardbibliothek von Go. Ihr lernt wesentliche Konzepte von Go wie Interfaces, Goroutinen und Channels kennen. Zur Entwicklung nutzen wir die Go-Tools und eine moderne Entwicklungsumgebung. Nach unserem Workshop könnt ihr erste eigene Go-Anwendungen entwickeln. Und ihr seid bereit die nächsten Schritte mit Go zu gehen. Go ist eine Sprache für Macher. Also lasst uns machen!
Testgetriebene Entwicklung mit Jasmine und Karma hat sich mittlerweile schon als defacto-Standard etabliert. Routinen ohne Abhängigkeiten lassen sich damit ohne Probleme testen. Die Schwierigkeiten beginnen jedoch schon, wenn es um die Auflösung von Abhängigkeiten geht. In diesem Vortrag werden verschiedene Strategien und Werkzeuge vorgestellt, mit denen Abhängigkeiten zu Objekten und Funktionen oder zum Server abgedeckt werden können. Aber nicht nur Abhängigkeiten stellen Schwierigkeiten bei der testgetriebenen Entwicklung dar, auch der Umgang mit Fixtures ist bei der testgetriebenen Entwicklung mit JavaScript relevant. Abgerundet wird dieser Vortrag mit einigen Best Practices für die testgetriebenen Entwicklung mit JavaScript.
Continuous Integration wird längst in vielen Projekten praktiziert. Kein Wunder, steht für das Tooling doch in vielen Fällen ein Jenkins oder Travis zur Verfügung. Mit GitLab CI ist dies jedoch nicht mehr nötig. Schritt für Schritt wird in dieser Session eine Pipeline mit verschiedenen Test- und Analysetools aufgesetzt -- zur Integration in neue und bestehende Projekte.
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?Marc Müller
DevOps als ganzheitliche Strategie geht von drei Phasen aus: Build - Measure - Learn. Die Build Phase mit der zeitnahen schnellen Realisierung, Integration und Deployment von neuen Features mit hohem Kundennutzen, haben Teams dank agiler Vorgehensmodelle mittlerweile gut im Griff. Sträflich vernachlässigt werden aber noch die essenziellen Phasen Messen und Verbessern. Viele Teams haben hier noch keine konkrete Idee, wie ein pragmatischer Messprozess aussehen kann. Der Vortrag wird sich deshalb dem Thema "Measure und Learn" aus Service- und Nutzerperspektive annehmen. Leitfragen sind bspw.: Arbeitet meine Infrastruktur noch wie geplant? Werden Dienste unbemerkt langsamer? Welche Funktionalitäten werden genutzt? Funktionieren Apps und Services überall wie geplant? Abgerundert werden die Fragen mit Demos aus AIT Projekten, bei denen u.a. das VS Last & Performance Test Framework sowie der Cloud-Dienst Application Insights neu zu einem 360° Applikationsmonitoring zusammengestellt wurden.
Weitere ähnliche Inhalte
Ähnlich wie SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
Clean Code ist wichtig, darin sind wir uns einig. Doch wie stellt man sicher, dass der Code sauber wird und auch sauber bleibt? Vor allem: was heißt eigentlich Sauberkeit und woran genau misst sie sich?Hendrik Lösch erklärt in seinem Vortrag verschiedene Qualitätsmetriken und wie diese mit Visual Studio geprüft werden können. Zu den betrachteten Metriken und Begriffen zählen zum Beispiel Klassiker wie Code Coverage und Lines of Code, aber auch die zyklomatische Komplexität und technische Schuld. Darüber hinaus wird der generelle Umgang mit Coding Conventions betrachtet und welche Herausforderungen sich ergeben wenn man sie in einem Unternehmen einführen möchte.
nagiosplugin - eine Python-Bibliothek für Monitoring-Plugins Christian Kauhaus
Auch wenn in der letzten Zeit sehr viel Bewegung in die Monitoring-Szene gekommen ist (#monitoringsucks etc.), werden die Platzhirsche Nagios/Icinga und ihre Standards auf absehbare Zeit nicht verschwinden. Das Nagios-Plugin-API stellt eine sehr weit verbreitete Schnittstelle zur Anbindung einzelner Checks an Monitoring-Systeme dar. Obwohl das API in den Grundzügen sehr einfach ist, ist der Programmieraufwand für vollständig konforme Plugins erstaunlich hoch.
Die nagiosplugin-Bibliothek nimmt dem Entwickler viele Details ab, so dass er sich auf den Inhalt seiner Checks konzentrieren kann. Der Vortrag führt in das Schreiben von Nagios-kompatiblen Plugins ein, zeigt den typischen Aufbau von Nagios-Plugins und das Grundprinzip eigener Plugins. Die Konfiguration und der Betrieb von Monitoring-Systemen im Großen sollen nicht thematisiert werden.
Video: http://pyvideo.org/video/1460/nagiosplugin-eine-python-bibliothek-fur-monitor
Konferenzseite: https://2012.de.pycon.org/programm/schedule/sessions/45/
Projekt-Homepage: https://projects.gocept.com/projects/nagiosplugin/wiki
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Marc Müller
DevOps als ganzheitliche Strategie geht von drei Phasen aus: Build - Measure - Learn. Die Build Phase mit der zeitnahen schnellen Realisierung, Integration und Deployment von neuen Features mit hohem Kundennutzen, haben Teams dank agiler Vorgehensmodelle mittlerweile gut im Griff. Sträflich vernachlässigt werden aber noch die essenziellen Phasen Messen und Verbessern. Viele Teams haben hier noch keine konkrete Idee, wie ein pragmatischer Messprozess aussehen kann. Der Vortrag wird sich deshalb dem Thema "Measure und Learn" aus Service- und Nutzerperspektive annehmen. Leitfragen sind bspw.: Arbeitet meine Infrastruktur noch wie geplant? Werden Dienste unbemerkt langsamer? Welche Funktionalitäten werden genutzt? Funktionieren Apps und Services überall wie geplant? Abgerundert werden die Fragen mit Demos aus AIT Projekten, bei denen u.a. das VS Last & Performance Test Framework sowie der Cloud-Dienst Application Insights neu zu einem 360° Applikationsmonitoring zusammengestellt wurden.
Im #Neuland gibt es noch heute stark in die Jahre gekommene Host- und Service-Monitoring-Lösungen, die zu den unliebsamen Langzeitbaustellen vieler Teams und Unternehmen gehören. Wer kennt es nicht, dass regelmäßige „False-Positive“-Alarme sich in Form von E-Mails oder SMS lästig bekannt machen, dass Webinterfaces schnell an ihre Grenzen stoßen, dass komplexe und benutzerfreundliche Graphen generiert werden sollen oder dass das Monitoring-Konstrukt nicht mit der großen Zahl an hippen neuen Docker-basierten Services/Checks zurechtkommt. Ganz zu schweigen von den lückenhaften oder fehlenden Programmierschnittstellen vieler Monitoring-Monolithen. In diesem Vortrag möchten wir euch eine auf Prometheus und Kubernetes basierende Musterlösung vorstellen, die eine Webapplikation über verschiedene Metriken hinweg überwacht und das DevOps-Betriebsteam zum richtigen Zeitpunkt auf konkrete Probleme aufmerksam macht.
Event: DevOpsCon, 06.12.2016
Speaker: Christoph Petrausch, inovex GmbH
Mehr Tech-Vorträge: https://www.inovex.de/de/content-pool/vortraege/
Vortrag der OOP 2014
Überblick über die Vorteile der Programmiersprache Go für skalierbare Anwendungen sowie ein Einblick in hierbei zu beachtende Probleme und ihre Lösung.
Go ist die Sprache Nummer 1 für cloudnative Entwicklung. Der Beweis: 19 von 25 Projekten der Cloud Native Computing Foundation im höchsten Reifegrad nutzen Go, darunter Kubernetes und Docker. Aber was macht Go interessant für Java oder .NET-Entwickler? Go ist durch und durch auf Nebenläufigkeit und Parallelisierung ausgelegt. Außerdem hat Go ein statisches Typsystem, eine moderne, mächtige Standardbibliothek und ist rasend schnell. Aber vor allem: Go macht Spaß. Mit einfachen praktischen Beispielen lernt ihr mit Go produktiv zu entwickeln. Wir beginnen mit dem Hello World. Dann ein kleines Kommandozeilen Tool und eine einfache Webanwendung. Dazu nutzen wir überwiegend die Standardbibliothek von Go. Ihr lernt wesentliche Konzepte von Go wie Interfaces, Goroutinen und Channels kennen. Zur Entwicklung nutzen wir die Go-Tools und eine moderne Entwicklungsumgebung. Nach unserem Workshop könnt ihr erste eigene Go-Anwendungen entwickeln. Und ihr seid bereit die nächsten Schritte mit Go zu gehen. Go ist eine Sprache für Macher. Also lasst uns machen!
Testgetriebene Entwicklung mit Jasmine und Karma hat sich mittlerweile schon als defacto-Standard etabliert. Routinen ohne Abhängigkeiten lassen sich damit ohne Probleme testen. Die Schwierigkeiten beginnen jedoch schon, wenn es um die Auflösung von Abhängigkeiten geht. In diesem Vortrag werden verschiedene Strategien und Werkzeuge vorgestellt, mit denen Abhängigkeiten zu Objekten und Funktionen oder zum Server abgedeckt werden können. Aber nicht nur Abhängigkeiten stellen Schwierigkeiten bei der testgetriebenen Entwicklung dar, auch der Umgang mit Fixtures ist bei der testgetriebenen Entwicklung mit JavaScript relevant. Abgerundet wird dieser Vortrag mit einigen Best Practices für die testgetriebenen Entwicklung mit JavaScript.
Continuous Integration wird längst in vielen Projekten praktiziert. Kein Wunder, steht für das Tooling doch in vielen Fällen ein Jenkins oder Travis zur Verfügung. Mit GitLab CI ist dies jedoch nicht mehr nötig. Schritt für Schritt wird in dieser Session eine Pipeline mit verschiedenen Test- und Analysetools aufgesetzt -- zur Integration in neue und bestehende Projekte.
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?Marc Müller
DevOps als ganzheitliche Strategie geht von drei Phasen aus: Build - Measure - Learn. Die Build Phase mit der zeitnahen schnellen Realisierung, Integration und Deployment von neuen Features mit hohem Kundennutzen, haben Teams dank agiler Vorgehensmodelle mittlerweile gut im Griff. Sträflich vernachlässigt werden aber noch die essenziellen Phasen Messen und Verbessern. Viele Teams haben hier noch keine konkrete Idee, wie ein pragmatischer Messprozess aussehen kann. Der Vortrag wird sich deshalb dem Thema "Measure und Learn" aus Service- und Nutzerperspektive annehmen. Leitfragen sind bspw.: Arbeitet meine Infrastruktur noch wie geplant? Werden Dienste unbemerkt langsamer? Welche Funktionalitäten werden genutzt? Funktionieren Apps und Services überall wie geplant? Abgerundert werden die Fragen mit Demos aus AIT Projekten, bei denen u.a. das VS Last & Performance Test Framework sowie der Cloud-Dienst Application Insights neu zu einem 360° Applikationsmonitoring zusammengestellt wurden.
Ähnlich wie SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen (20)
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
SEROM 2018 - 11/14/17/20 - C++ gestern heute und morgen
1. 1
11/14/17/20
C++ gestern heute und morgen
Prof. Dr. Herwig Henseler
henseler@phwt.de
http://www.herwig-henseler.de/phwt
Twitter: @herwighenseler
SEROM 3.0 – 19.10.2018 – Vechta
2. 2
C++ in den TOP 5 der uncoolsten
Programmiersprachen?
3. 3
Tiobe Index Oktober 2018
Quelle: https://www.tiobe.com/tiobe-index/
# Sprache Rating
1 Java 17,8%
2 C 15,4%
3 C++ 7,6%
4 Python 7,1%
5 Visual Basic .NET 5,8%
6 C# 3,4%
7 PHP 2,7%
8 JavaScript 2,3%
5. 5
Positive Eigenschaften
Objekte auf Stack oder Heap
Virtual nicht default
Deterministische Speicherverwaltung
Destruktoren
Native OS-APIs
konditionale Codegenerierung
...
„You don‘t pay for things you don‘t need“
7. 7
C++ 1.0 (1985)
C++ 2.0 (1989)
C++98 Erster Standard
C++11 lambdas, type inference, typed enums, range-for, move-
semantics, constexpr, regexp, smart pointer, array/vector,
variadic templates, rvalue-references, static assignments,
threads, initializer
C++14 generic lambdas, locking, user defined literals
C++17 parallel algorithms, map/reduce, tasks, optionals,
variants, if-initializer, structured bindings
C++20 concepts, coroutines, module system, reflection,
transactional memory, networking, ranges, modules
8. 8
Compilerunterstützung
C++11 gcc / clang++ in 2012
C++11 erst mit Visual Studio 2015
http://en.cppreference.com/w/cpp/compiler_support
C++11 C++14 C++17
core library
gcc 5.0 5.1 7.1 incomplete
llvm/clang++ 3.8 3.8 5.0 incomplete
msvc 2015.0 2017.0 2017.3 2017.3
9. 9
1
2
3
4
5
6
7
8
9
10
11
12
13
1 Buffer Overflows
int carr[vmax];
int sum = 0;
for (int i = 0; i <= vmax; ++i) {
sum += carr[i];
}
vector<int> vec(vmax);
int sum{ 0 };
for (const auto x : vec) {
sum += x;
}
int sum{ std::accumulate(begin(vec), end(vec), 0) };
C++98
C++11
10. 10
Summe von 250 Mio ints in [ms]
Java: 122 ms Swift: 255 ms
Ruby: 12 s Perl 16 s Python 35 s
int carr[vmax];
for (size_t i = 0; i < vmax; ++i) { sum += carr[i]; } 66 ms
vector<int> vec(vmax);
for (const auto x : vec) { sum += x; } 68 ms
for (size_t i = 0; i < vec.size(); ++i) { sum += vec.at(i); } 74 ms
for (size_t i = 0; i < vec.size(); ++i) { sum += vec[i]; } 66 ms
11. 11
1
2
3
4
5
6
7
8
9
10
11
12
13
Geschwindigkeitsmessung
#include <ctime>
clock_t t1 = clock();
// zu testende Funktion ...
clock_t t2 = clock();
int ms = t2 – t1;
cout << ms;
#include <chrono>
auto t1 = std::chrono::high_resolution_clock::now();
// zu testende Funktion ...
auto t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> ms = t2 - t1;
cout << ms.count();
C++98
C++11
17. 17
1
2
3
4
5
6
7
8
9
10
11
12
13
RAII
void doSomethingWithMemoryLeak(void) {
Kreis* kreis = new Kreis(300);
if (kreis->getX() > 10) {
throw; // delete kreis unterbleibt
}
delete kreis;
}
void doSomethingWithRAII(void) {
const auto kreis{ std::make_unique<Kreis>(300) };
if (kreis->getX() > 10) {
throw;
}
}
RAII = Lebenszeit einer Ressource wird
an die Lebenszeit einer lokalen Variablen
gebunden.
C++98
C++14
18. 18
4 Dürftige Standardbibliothek
Bisher: C++ Ohne Bibliotheken/Frameworks kaum nutzbar
STL
Boost
Qt
Poco
...
Modernes C++ übernimmt viel davon in std::
Problem: Frameworks müssen nachziehen
19. 19
5 Verengende Konvertierung
„modernere“ Schreibweise
int x = 0; // normale Syntax
int x(0); // „OOP“-Syntax
int x{ 0 }; // C++11: Syntax über Initialisierer
Initializer verhindern narrowing conversion
int pi = 3.14; // implizite Typkonvertierung: x hat Wert 3
int pi{ 3.14 }; // compilerfehler
22. 22
7 Kein Styleguide
C++ Core Guidelines (>500 Seiten)
AUTOSAR „Guidelines for the use of the C++14 language in
critical and safety-related systems“ (371 Seiten)
SEI CERT C++ Coding Standard: Rules for Developing Safe,
Reliable, and Secure Systems in C++ (430 Seiten)
23. 23
1
2
3
4
5
6
7
8
9
10
11
12
13
C++11 constexpr
class Point {
public:
constexpr Point(const int x, const int y) : _x(x), _y(y) {}
constexpr int getX(void) const { return _x; }
private:
int _x, _y;
};
int main(void) {
constexpr Point points[] = { Point(10, 20), Point(30, 40) };
constexpr int x1{ points[1].getX() }; // 30 zur compiletime!
37. 37
Ein Rätsel
Was liefert keine Variable i vom Typ int mit dem Wert 2?
1) int i = 2;
2) int i = { 2 };
3) int i{ 2 };
4) int i(2);
5) auto i = 2;
6) auto i = { 2 };
7) auto i{ 2 };
8) auto i(2);
Lösung: 6 und 7 liefern eine std::initializer_list<int>