Profil - Programmierer/Softwareentwickler¶

Projekthistorie¶

Zeitraum

2019 - 2020, fortlaufend

Projekt

Konzeptionierung und Implementation eines Programms für die Analyse von aufgezeichnetem Netzwerktraffic und Ermittlung statistischer Zahlen

Aufgaben, jeweils Konzeptionierung und Implementation:
  • I/O-Modul: Einlesen von PCAP/PCAPNG Dateien

  • Extraktion von Basisinformationen aus den eingelesenen Paketen, z.B. IP-Adressen, Portnummern, usw.

  • Restaurierung von TCP-Verbindungen inkl. der zugrunde liegenden Flusssteuerung

  • Restaurierung von Request-Reply-Vorgängen von UDP-basierten Protokollen (z.B. DNS-Anfragen)

  • für den unterstützten Satz an Applikationsprotokollen: jeweils ein Modul

  • unterstützte Protokolle momentan:

    • Layer 2: Ethernet 802.3, Linux Cooked Mode, ARP

    • Layer 3: IPv4, IPv6, ICMP

    • Layer 4: TCP, UDP

    • höhere Layer: DNS, mDNS, DHCP, SNMP, PPPoE, TFTP, SMTP, HTTP, RIP, NTP

  • Ausarbeiten der jeweils nötigen Analyseschritte für die Zusammenfassung der extrahierten Informationen (Benutzer braucht z.B. Indikatoren über Engpässe, Auslastung, usw.)

  • Backend portabel gehalten, momentan Windows und Linux

  • Backend in C/C++ implementiert mit Wrapper f. eine PInvoke-kompatible DLL f. Anbindung des Frontends (nur Windows)

  • WPF-basiertes Frontend, das das Backend per PInvoke benutzt

  • Backend ist C-artiger Code (nicht objektorientiert) mit Verwendung von STL-Containern (C++)

  • Analyse-Durchsatz von 100 MB/s und mehr erreichbar

Stichworte

Deep Packet Inspection offline, Protokollanalyse, C/C++, .Net, C#, PInvoke, WPF, Catch (Unit-Test Framework für C++)

Zeitraum

2017 – 2018

Projekt

Konzeptionierung und Implementation eines Programms zur Erzeugung von Videos aus Einzelbildern (Slideshow) inkl. einem Satz an Ãœbergangseffekten, in C++ und CUDA

  • Benutzung der eigenen Bibliothek für die halbautomatische Vektorisierung von Algorithmen für die Berechnung der Effekte per CPU (benutzt erweiterte SIMD-Befehlssätze von x86-basierten Prozessoren wie SSE2)

  • Berechnungen können sowohl im 32Bit-Fließkommaformat als auch in schmaleren Ganzzahlformaten stattfinden (z.B. 8 Bit pro Farbkomponente im RGB-Farbraum)

  • Einige der Effekte: Portierung nach CUDA (CUDA: Schnittstelle von nVidia f. die relativ freie Programmierung (nicht beschränkt durch einen reinen Shader-Mechanismus) von GPUs, besonders vorteilhaft bei gut parallelisierbaren Berechnungen)

  • Portierung auf ARM NEON (ARM-spezifische SIMD-Variante) mit relativ geringen Änderungen an den Algorithmen selbst in Zukunft möglich

Stichworte

C++, SIMD, CUDA, Catch (Unit-Test Framework für C++)

Zeitraum

2015 – 2016

Projekt

Feinkonzeptionierung und Implementation eines patentierten Verfahrens zur Beschleunigung von HTTP-Verbindungen für Satelliten-Internetzugänge

Kontext:

Aufgrund verfahrensbedingter sehr hoher Latenzen sind Internetzugänge per Satellitenschüssel (birektional) wenig performant, obwohl rein technisch ausreichend Download-Bandbreite zur Verfügung steht.

Dieses Problem ist für Webseiten besonders stark ausgeprägt, da diese aus vielen Einzelressourcen zusammen gesetzt werden.

Kern des Problems ist, dass das im Internet verwendete Protokoll TCP für dieses Einsatzszenario nicht ausreichend geeignet ist, um die zur Verfügung stehende Bandbreite voll nutzen zu können.

Aufgaben:

  • Feinkonzeptionierung eines eigenen Protokolls zum Transport von Web-Ressourcen

  • Implementation der serverseitigen Komponente, erforderte auch Anbindung an ein Headless-Browser-Modul

  • Implementation der clientseitigen Komponente (Ähnlichkeiten mit einem HTTP-Proxy)

  • Konzeptionierung und Implementation eines Verfahrens zur Reduktion der für die Ãœbertragung der HTTP-Header nötigen Bandbreite (war möglich, da sowohl Server als auch Client Teil des Projektes war und keine Standardkomponenten sind)

  • Implementation eines Interpreters für eine projektspezifische Skriptsprache zur Testautomatisierung inkl. Entwurf der Sprache selbst

  • Konzeptionierung und Implementation einer Sammlung von Unit-Tests, benutzt Google Test

  • Portierung der Referenzimplementation des BLAKE2B Algorithmus nach SSE2 (x86/x64) und AltiVec, des BLAKE2S Algorithmus nach ARM NEON

Stichworte

C++, HTTP, UDP, sockets, gtest, headless browser

Zeitraum

2015 - 2017

Projekt

Entwicklung mehrerer Android-Applikationen aus den Bereichen Entertainment und Productivity; mehrere Erweiterungs- und Anpassungsrunden im angegebenen Zeitraum (Anpassung an neuere Android-Versionen, Tablets, etc.)

Es handelt sich um Applikationen mit größtenteils lokaler Verarbeitung ohne serverseitigem Backend.

Stichworte

Java, Android

Zeitraum

seit 2014

Projekt

Implementation und Wartung einer C++-Bibliothek zur halbautomatischen Vektorisierung von Algorithmen für SIMD Befehlssätze von x86- und ARM-basierten Prozessoren (Single Instruction Multiple Data)

  • C++ Template basiert

  • verwendet intern Compiler-Intrinsics (kein Inline-Assembler)

  • erlaubt Implementation von Algorithmen auf höherem Level als reine Benutzung von Compiler-Intrinsics oder Inline-Assembler, ohne wesentlich schlechteren Code zu erzeugen

  • Verwendung von C++ Templates erlaubt Verwendung von Befehlssequenzen, die vom Compiler direkt integriert werden (Inlining), ohne zwangsweise auf den Komfort von Funktionen verzichten zu müssen, da Verzweigungen und Funktionsaufrufe Nadelöhre sein können

  • unterstützt auch ARM NEON f. 32Bit-Fließkommaformat

  • ARM NEON Unterstützung auch für Android (NDK)

Stichworte

C++, Templates, SIMD, SSE2, GCC, MSVC, Compiler-Intrinsics, ARM NEON

Zeitraum

2014 - 2015

Projekt

Konzeptionierung und Implementation einer portablen Lösung aus dem Bereich Digital Content Creation in C++: prozedurale Generierung von Bildern und Texturen (z.B. für 3D-Applikationen)

  • umfangreiche Nutzung obiger Bibliothek für Berechnungen mit gepackten Vektoren/SIMD

  • Berechnungsschritte werden vom Benutzer in einem Graph zusammengestellt, die Berechnungen finden an den Knoten statt, jeder Knotentyp hat einen Satz an Parametern

  • jeder Knotentyp hat ein oder mehrere Ein- und Ausgänge die miteinander per Kanten verbunden werden können

  • Kanten können Skalare, Vektoren mit festen Größen oder Graustufen- (1 Kanal) bzw. Farbbilder (4 Kanäle) transportieren

  • mehr als 90 Knotentypen

Stichworte

C++, Catch (Unit-Test Framework für C++), Bildbearbeitung, Graphenverarbeitung (gerichtet, azyklisch)

Zeitraum

2011 - 2013

Projekt

Software-Entwickler (Festanstellung)

  • Einarbeitung in das Output Management System W-ELP, Erweiterung der Konfigurationsoberfläche und Entwicklung der Funktionalität zur Reduzierung von MS Windows basierenden Datenstromgrößen und deren Wandlung in ISO Zeichensätzen

  • Eigenständige Entwicklung einer komplett neuen Installationssoftware für das RICOH Intelligente Barcode System, inklusive Formularmanagement und Anbindung an W-ELP

  • Eigenständige Entwicklung eines PCL 6 Parsers (Druckersprache)

  • Weitere kleinere in sich abgeschlossene Projekte

Pflege der Software Update Lösung für Fahrzeugdiagnosesysteme (siehe unten) im Nebenerwerb

Stichworte

C, C++, MFC, Druckersprachen (PCL 5 und PCL 6/PCL XL), SNMP, UDP, TCP, Winsock, Netzwerkscan per SNMP (Finden von Druckern), eigene spezialisierte Impl. eines Telnet-Client, automatisierte Installation von Erweiterungen für Drucker-Firmware über webbasierte Administrationsschnittstelle

Zeitraum

2006 - 2013

Projekt

Konzeptionierung, Implementation und Wartung einer Software Update Lösung in C++ für ein modifiziertes Windows-System aus dem Bereich Fahrzeugdiagnose, Projekt umfasste ca. 20 Wartungsaufträge im angegebenen Zeitraum

  • Installationspakete liegen als lose Sammlung auf einem HTTP-Server vor und enthalten einen Satz von Bedingungen in Form von Ausdrücken

  • Parsen dieser Ausdrücke und deren Auswertung gegen den Updatestand des Diagnosesystems

  • Herunterladen der Menge der aus der Auswertung hervorgegangenen installierbaren Paket

  • Wiederaufsetzen des Download-Vorgangs nach Abbruch

  • Generierung einer browserbasierten Benutzeroberfläche per XSLT

  • Zurücksenden von Informationen bzgl. Updateständen an den Server

  • in den letzten Jahren des Projektes wurden auch Flash-Dateien (Firmware-Updates f. Steuergeräte in den Fahrzeugen) über diese Software ausgeliefert

  • ein Windows-Dienst sorgt für ein regelmäßiges Starten des hier grob skizzierten Prozesses

  • es können Paketabhängigkeiten definiert werden, so dass eine entsprechende Abhängigkeitsanalyse zu implementieren war unter Verwendung des Verfahrens “Topologische Sortierung”

Stichworte

C++, STL, Boost (in geringem Umfang), Windows-Dienst, Parserentwicklung, HTTP, HTML, CSS, Javascript, XML, XSLT

Zeitraum

2005 - 2011

Projekt

Konzeptionierung, Implementation und Wartung eines XML-Konverters in C++ mit Verwendung von Apache Xalan/Xerces

mehrere Runden mit Wartungsarbeiten im angegebenen Zeitraum: neue Funktionalität, Anpassungen aufgrund geänderter Datenformate, Unterstützung anderer Fahrzeugsparten

  • Extraktion von Sitzungsdaten aus Protokolldateien der Diagnosesoftware (sog. Kurztests: Diagnosesoftware liest Fehlercodes aus im Fahrzeug verbauten Steuergeräten aus)

  • Filterung und Zusammenfassung dieser Einzeldaten

  • Konvertierung in das Zielformat per XSLT

  • Umfasste auch das Analysieren der Protokolldateien und das Unterbreiten von Vorschlägen, aus welchen Protokolldateielementen die fachlich benötigen Einzelinformationen zu extrahieren und ggf. einer Vorverarbeitung zu unterziehen sind

  • Separate Schnittstelle, die aus Diagnosebedatungen direkt aufrufbar ist und die Analyse der Protokolldateien umgeht

  • Zielformat ist Eingabeformat für ein webbasiertes Wissens- und Recherchesystem

Stichworte

C++, Apache Xalan/Xerces, XML, XSLT, DLL

pcap-parser is an offline processing and analysis tool with
deep packet inspection capabilities which collects statistics
and other processing results from a set of network capture files.

In this post I'll talk a bit about the implementation details
and challenges -- met and solved and still open ones -- while implementing the
first versions of this tool.

 

There's now a pre-alpha release of the packet capture tool available.

Download the Windows 64 Bit binaries

(zip file)

 

There's now a new pre-alpha version of the deep packet inspection tool for offline use available.

Download the Windows 64 Bit binaries

(zip file)

 

We're currently working on a program which analyzes network capture files,
collects statistics about the captured network traffic and displays the results.

In this article I'll talk a bit about the features of the program, more technical
information will follow in future articles.