Für Produkte im Bereich der Bahnleittechnik wurden sowohl Server-Applikationen in Ada als auch ein Client mit Bedienoberfäche in Java weiterentwickelt.
Dabei lag der Fokus auf betriebssystemnaher Programmierung, sowie der Einbindung von Protokolltreibern für die in der Bahnleittechnik etablierten Kommunikations-Protokolle.
Ausführliche Komponententests für die Server-Applikationen wurden in C# umgesetzt.
Die Software-Entwicklung für Bahnleitsysteme fand in einem regulierten Umfeld statt, und erforderte die Einhaltung eines genau definierten Entwicklungsprozess. Dieser umfasste insbesondere die Erstellung von detaillierten Dokumentationen und Testprozeduren.
Eine wesentliche Aufgabe bestand in der Vorbereitung eines Compiler-Wechsels von ObjectAda (32 Bit) zu GNAT (64 Bit). Aufgrund der umfangreichen Ada Codebasis von mehreren Millionen Codezeilen mussten hierfür zahlreiche Fehleranalysen und Korrekturen durchgeführt werden.
Das Projekt bestand in der Modernisierung einer in PHP geschriebenen Web-Anwendung zur Arbeitszeiterfassung und Dienstplanung.
Das Team war zusammengesetzt aus dem Teamleiter, einem spezialisierter Frontend-Entwickler, einem Flutter-Entwickler, und aus mir als Fullstack-Entwickler.
Gemeinsam mit dem Frontend-Entwickler haben wir eine neue Angular-App entwickelt, um das bisherige Design auf eine Single-Page-Application umzustellen. Durch den modularen Aufbau konnte ich mehrere Features eigenständig umsetzen und in die App integrieren. Dabei kamen Angular 11, Tailwind, nx, ngrx/store und RxJS zum Einsatz. Die vielfältigen Gestaltungsmöglichkeiten im Bereich UI/UX wurden regelmässig im Team diskutiert, umgesetzt, und getestet.
Die Angular-App wurde als Webview in eine native App eingebunden, welche vom zuständigen Entwickler in Flutter erstellt wurde. Dabei habe ich den Bereich der Authentifizierung gestaltet, um eine sichere Übergabe der Login-Daten an die eingebettete Angular-App zu erreichen.
Die Entwicklung eines neuen API als Backend lag in meiner Verantwortung und wurde in PHP umgesetzt. Ich habe mich als Framework für Slim 4 entschieden, um auf einer modernen und leichtgewichtigen Basis aufzubauen. Die Dokumentation und das Testen der API-Endpunkte erfolgte mit Swagger (OpenAPI).
Eine umfangreiche MSSQL Datenbank wurde mit vielfältigen SQL Anfragen ausgelesen, wobei auch Performance-Analysen und Optimierungen notwendig waren. Die Datenbank umfasst 130 Tabellen, und befindet sich im Produktiveinsatz bei einem Dienstleistungsunternehmen mit 350 aktiven Mitarbeitern. Die regelmässig vom Kunden generierten Supportanfragen und Fehlerberichte wurden analysiert, und die entsprechenden Korrekturen an Datenbank und Reporting-Skripten durchgeführt.
Mehrere externe REST APIs wurden an das neu entwickelte API angebunden, und so eine vereinheitlichte Schnittstelle geschaffen.
Ein komplexes in C# geschriebenes externes API, welches als MVC ASP.Net Applikation auf IIS eingerichtet war, konnte ich stark vereinfachen und als lokalen Windows-Dienst neu kompilieren, womit Einrichtung und Wartung auf dem Server erleichtert werden.
Für die neue Version des Backends habe ich in PHP eine flexibel erweiterbare Klasse zur Speicherung von vererbbaren Parametern und Settings in einer MSSQL Datenbank geschaffen.
Entwicklung einer C++ Bibliothek zur Ansteuerung eines industriellen Wägesystems sowohl über eine serielle Schnittstelle als auch über TCP/IP, sowie Einbettung des nativen Codes in die bestehende .NET Umgebung mittels Wrapper-Klassen in C#.
Besondere Herausforderungen beim Übergang von nativem zu managed Code waren das Vermeiden von Speicherlecks, korrekte Typentransformationen (Marshaling), und die Behandlung von Exceptions. Durch die Verwendung der Boost Asio Bibliothek konnte eine einheitliche I/O-Klasse implementiert werden, die die Kommunikation sowohl über serielle Schnittstellen als auch über TCP/IP ermöglicht.
Zur Funktionsüberprüfung wurden Unit Tests implementiert unter Verwendung des NUnit Frameworks für C# und des Microsoft Unit Testing Frameworks für C++. Desweiteren wurde zur Demonstration eine Desktopanwendung mit Bedienoberfäche in WPF erstellt.
Eine weitere Aufgabe bestand in der Ansteuerung eines Etikettierungssystems über die serielle Schnittstelle, wozu eine elektronische Schaltung und ein PCB Layout mit dem E-CAD Programm KiCad entworfen und als Prototyp umgesetzt wurde. Dabei kam insbesondere ein AVR Mikrokontroller und ein TTL-RS232 Pegelwandler zum Einsatz.
Die Zusammenarbeit im Entwicklungsteam erfolgte unter Verwendung von Azure DevOps und Git.
Für ein neues Modell eines optischen Messinstruments wurde die Gerätesoftware sowie mehrere Programme zur Darstellung der Daten und zur Kalibrierung und Kontrolle in der Produktionsstraße überarbeitet.
Die Gerätesoftware bestand aus der Firmware für eine Messplatine (Mikrokontroller C51 / Keil uVision) sowie embedded Software (C# .NET Compact) zur Ansteuerung und zur Darstellung des User Interface.
Das neue Modell erforderte eine Datenbankerweiterung mit automatischem Upgrade zur Sicherstellung der Rückwärtskompatibilität. Die entsprechenden Arbeitsschritte wurden detailliert dokumentiert.
Ein Desktop-Programm zur Darstellung der Daten wurde für das neue Modell angepasst, insbesondere in Bezug auf das User Interface (C# Winforms / WPF).
Die Kalibrier- und Testsoftware einer Produktionsanlage wurde um zusätzliche Messparameter erweitert und für einen neuen Farbsensor modifiziert. Eine aktualisierte Dokumentation der Kalibrierungsprozesse wurde erstellt.
Für einen Kunden aus der Finanzbranche wurde ein Antragsformular für Kreditanträge weiterentwickelt.
Das Frontend-Design wurde modernisiert und mit Bootstrap für mobile Endgeräte aufbereitet. Im Backend wurde die Anbindung an ein externes API erweitert und das Error-Handling verbessert. Die Struktur der Datenbank wurde angepasst, eine passwortgeschützte Reporting-Funktion eingeführt, und der Versand von Bestätigungsemails automatisiert.
Bei diesem Projekt handelt es sich um eine Eigenentwicklung im Bereich der optischen Messtechnik auf Smartphones.
Das Ziel war die Umsetzung von Strahlprofilmessungen für Laserstrahlen mit Hilfe von Zielkarten, an denen ein Laserstrahl diffus gestreut wird.
Die Zielkarten werden von der Android App mit Computer-Vision-Algorithmen erkannt, das Bild perspektivisch entzerrt, und schliesslich werden Gauss-Kurven an die Intensitätsverteilung des Strahls angepasst. Das Strahlprofil lässt sich direkt in der App in 3D visualisieren.
Um korrekte Messungen zu ermöglichen wurden die Kameraparameter über das Camera2 API gesteuert. Die Bildverarbeitung erfolgte als C-Programm in Renderscript, und die 3D-Visualisierung nutzt die OpenGLES Schnittstelle für Embedded Systems.
Bei einem bestehenden Eigenprojekt aus der Navigations- und Reisebranche war es nach einer Preisänderung von Google Maps notwendig, zu einem neuen Kartenanbieter zu wechseln.
Dazu musste ein großer Teil des Frontends und auch einige Tools neugeschrieben werden. Die bestehende Funktionalität konnte weitgehend mit dem neuen API von Mapbox nachgebildet werden.
Desweiteren wurde ein Cache für Geocoding-Anfragen eingeführt, um die Kosten für API-Zugriffe zu reduzieren.
Experimentelle Arbeit in einem Laserlabor zur Untersuchung ultrakalter Atome
Optische Abbildung einer atomaren Dichteverteilung
Verkehrsleitsysteme
Sensorik
Für Produkte im Bereich der Bahnleittechnik wurden sowohl Server-Applikationen in Ada als auch ein Client mit Bedienoberfäche in Java weiterentwickelt.
Dabei lag der Fokus auf betriebssystemnaher Programmierung, sowie der Einbindung von Protokolltreibern für die in der Bahnleittechnik etablierten Kommunikations-Protokolle.
Ausführliche Komponententests für die Server-Applikationen wurden in C# umgesetzt.
Die Software-Entwicklung für Bahnleitsysteme fand in einem regulierten Umfeld statt, und erforderte die Einhaltung eines genau definierten Entwicklungsprozess. Dieser umfasste insbesondere die Erstellung von detaillierten Dokumentationen und Testprozeduren.
Eine wesentliche Aufgabe bestand in der Vorbereitung eines Compiler-Wechsels von ObjectAda (32 Bit) zu GNAT (64 Bit). Aufgrund der umfangreichen Ada Codebasis von mehreren Millionen Codezeilen mussten hierfür zahlreiche Fehleranalysen und Korrekturen durchgeführt werden.
Das Projekt bestand in der Modernisierung einer in PHP geschriebenen Web-Anwendung zur Arbeitszeiterfassung und Dienstplanung.
Das Team war zusammengesetzt aus dem Teamleiter, einem spezialisierter Frontend-Entwickler, einem Flutter-Entwickler, und aus mir als Fullstack-Entwickler.
Gemeinsam mit dem Frontend-Entwickler haben wir eine neue Angular-App entwickelt, um das bisherige Design auf eine Single-Page-Application umzustellen. Durch den modularen Aufbau konnte ich mehrere Features eigenständig umsetzen und in die App integrieren. Dabei kamen Angular 11, Tailwind, nx, ngrx/store und RxJS zum Einsatz. Die vielfältigen Gestaltungsmöglichkeiten im Bereich UI/UX wurden regelmässig im Team diskutiert, umgesetzt, und getestet.
Die Angular-App wurde als Webview in eine native App eingebunden, welche vom zuständigen Entwickler in Flutter erstellt wurde. Dabei habe ich den Bereich der Authentifizierung gestaltet, um eine sichere Übergabe der Login-Daten an die eingebettete Angular-App zu erreichen.
Die Entwicklung eines neuen API als Backend lag in meiner Verantwortung und wurde in PHP umgesetzt. Ich habe mich als Framework für Slim 4 entschieden, um auf einer modernen und leichtgewichtigen Basis aufzubauen. Die Dokumentation und das Testen der API-Endpunkte erfolgte mit Swagger (OpenAPI).
Eine umfangreiche MSSQL Datenbank wurde mit vielfältigen SQL Anfragen ausgelesen, wobei auch Performance-Analysen und Optimierungen notwendig waren. Die Datenbank umfasst 130 Tabellen, und befindet sich im Produktiveinsatz bei einem Dienstleistungsunternehmen mit 350 aktiven Mitarbeitern. Die regelmässig vom Kunden generierten Supportanfragen und Fehlerberichte wurden analysiert, und die entsprechenden Korrekturen an Datenbank und Reporting-Skripten durchgeführt.
Mehrere externe REST APIs wurden an das neu entwickelte API angebunden, und so eine vereinheitlichte Schnittstelle geschaffen.
Ein komplexes in C# geschriebenes externes API, welches als MVC ASP.Net Applikation auf IIS eingerichtet war, konnte ich stark vereinfachen und als lokalen Windows-Dienst neu kompilieren, womit Einrichtung und Wartung auf dem Server erleichtert werden.
Für die neue Version des Backends habe ich in PHP eine flexibel erweiterbare Klasse zur Speicherung von vererbbaren Parametern und Settings in einer MSSQL Datenbank geschaffen.
Entwicklung einer C++ Bibliothek zur Ansteuerung eines industriellen Wägesystems sowohl über eine serielle Schnittstelle als auch über TCP/IP, sowie Einbettung des nativen Codes in die bestehende .NET Umgebung mittels Wrapper-Klassen in C#.
Besondere Herausforderungen beim Übergang von nativem zu managed Code waren das Vermeiden von Speicherlecks, korrekte Typentransformationen (Marshaling), und die Behandlung von Exceptions. Durch die Verwendung der Boost Asio Bibliothek konnte eine einheitliche I/O-Klasse implementiert werden, die die Kommunikation sowohl über serielle Schnittstellen als auch über TCP/IP ermöglicht.
Zur Funktionsüberprüfung wurden Unit Tests implementiert unter Verwendung des NUnit Frameworks für C# und des Microsoft Unit Testing Frameworks für C++. Desweiteren wurde zur Demonstration eine Desktopanwendung mit Bedienoberfäche in WPF erstellt.
Eine weitere Aufgabe bestand in der Ansteuerung eines Etikettierungssystems über die serielle Schnittstelle, wozu eine elektronische Schaltung und ein PCB Layout mit dem E-CAD Programm KiCad entworfen und als Prototyp umgesetzt wurde. Dabei kam insbesondere ein AVR Mikrokontroller und ein TTL-RS232 Pegelwandler zum Einsatz.
Die Zusammenarbeit im Entwicklungsteam erfolgte unter Verwendung von Azure DevOps und Git.
Für ein neues Modell eines optischen Messinstruments wurde die Gerätesoftware sowie mehrere Programme zur Darstellung der Daten und zur Kalibrierung und Kontrolle in der Produktionsstraße überarbeitet.
Die Gerätesoftware bestand aus der Firmware für eine Messplatine (Mikrokontroller C51 / Keil uVision) sowie embedded Software (C# .NET Compact) zur Ansteuerung und zur Darstellung des User Interface.
Das neue Modell erforderte eine Datenbankerweiterung mit automatischem Upgrade zur Sicherstellung der Rückwärtskompatibilität. Die entsprechenden Arbeitsschritte wurden detailliert dokumentiert.
Ein Desktop-Programm zur Darstellung der Daten wurde für das neue Modell angepasst, insbesondere in Bezug auf das User Interface (C# Winforms / WPF).
Die Kalibrier- und Testsoftware einer Produktionsanlage wurde um zusätzliche Messparameter erweitert und für einen neuen Farbsensor modifiziert. Eine aktualisierte Dokumentation der Kalibrierungsprozesse wurde erstellt.
Für einen Kunden aus der Finanzbranche wurde ein Antragsformular für Kreditanträge weiterentwickelt.
Das Frontend-Design wurde modernisiert und mit Bootstrap für mobile Endgeräte aufbereitet. Im Backend wurde die Anbindung an ein externes API erweitert und das Error-Handling verbessert. Die Struktur der Datenbank wurde angepasst, eine passwortgeschützte Reporting-Funktion eingeführt, und der Versand von Bestätigungsemails automatisiert.
Bei diesem Projekt handelt es sich um eine Eigenentwicklung im Bereich der optischen Messtechnik auf Smartphones.
Das Ziel war die Umsetzung von Strahlprofilmessungen für Laserstrahlen mit Hilfe von Zielkarten, an denen ein Laserstrahl diffus gestreut wird.
Die Zielkarten werden von der Android App mit Computer-Vision-Algorithmen erkannt, das Bild perspektivisch entzerrt, und schliesslich werden Gauss-Kurven an die Intensitätsverteilung des Strahls angepasst. Das Strahlprofil lässt sich direkt in der App in 3D visualisieren.
Um korrekte Messungen zu ermöglichen wurden die Kameraparameter über das Camera2 API gesteuert. Die Bildverarbeitung erfolgte als C-Programm in Renderscript, und die 3D-Visualisierung nutzt die OpenGLES Schnittstelle für Embedded Systems.
Bei einem bestehenden Eigenprojekt aus der Navigations- und Reisebranche war es nach einer Preisänderung von Google Maps notwendig, zu einem neuen Kartenanbieter zu wechseln.
Dazu musste ein großer Teil des Frontends und auch einige Tools neugeschrieben werden. Die bestehende Funktionalität konnte weitgehend mit dem neuen API von Mapbox nachgebildet werden.
Desweiteren wurde ein Cache für Geocoding-Anfragen eingeführt, um die Kosten für API-Zugriffe zu reduzieren.
Experimentelle Arbeit in einem Laserlabor zur Untersuchung ultrakalter Atome
Optische Abbildung einer atomaren Dichteverteilung
Verkehrsleitsysteme
Sensorik
"Der Consultant ist ein exzellenter Entwickler und wir haben seine lösungsorientierte, pragmatische Arbeitsweise sehr geschätzt. Durch sein hervorragendes Fachwissen und auch durch die vorausschauende Arbeitsweise war er ein wertvolles und geschätztes Mitglied für dieses Projekt. Wir würden ihn jederzeit bedingungslos weiterempfehlen und wieder mit ihm zusammenarbeiten."
— Projekt Web Applikation zur Arbeitszeiterfassung, 01/20 - 04/21
Referenz durch Geschäftsführer, Armbruster empiric it, vom 25.04.21
"Die Zusammenarbeit mit dem Consultant war zu unserer vollsten Zufriedenheit. Der Code wurde sauber und strukturiert erarbeitet und ist für uns sehr verständlich. Das Endprodukt wurde gut getestet, dokumentiert und sehr regelmässig in unserer Versionsverwaltung (Git) abgelegt. Wir schätzten auch seine hohe Flexibilität, nicht nur per remote sondern auch zwischendurch vor Ort zu kommen, um die Fortschritte zusammen zu besprechen und zu testen. Durch das ausführliche und präzise Testen der Schnittstelle konnten auch Fehler in der Peripherie festgestellt und die Schnittstelle demensprechend erweitert werden."
— Projekt Entwicklung einer Schnittstelle für industrielle Waagen in C++ und C#, 06/20 - 09/20
Referenz durch Lead Software Developer, LUZI AG, vom 22.10.20