OaSharp (OpenAPI Sharp)

An OpenAPI / Swagger C# REST server code generator and hosting .NET standard library | 5/21/2020

My first attempts with C# server code generation for OpenAPI failed catastrophically. The generated c# server code produced by https://editor.swagger.io put me right into dependency and deprecation hell. I had to install several gigabytes of ASP.NET core and .NET core libraries just to find out that the generated code was targeting a framework which is not supported anymore. Furthermore, VS2019 was pretty buggy handling these project types and had no nuget support.

I just wanted a lightweight solution for a simple HTTP REST server in C# supporting a simple JSON schema. Here it is: https://bitbucket.org/besting-it/oasharp

OaSharp is an OpenAPI / Swagger 3.x REST server .NET standard library and code generator which requires only minimal dependencies and is easy to use.


Instantly backup your files on change | 3/21/2014

DocuCast is a real time file revision and backup system for use in professional and private environments. DocuCast stores important documents and other files quickly after they have changed!

You can read more here!

UIPSnap - Windows Forms "serialization" (C# / .NET)

Technologies: .NET (C #), Windows Forms, Reflection, XML

UIPSnap (User Interface Property Snap) is a software library for storing and restoring the state of .NET Forms user interfaces. With only a few lines of code, properties of all the controls contained in a form (eg position, size but also selections and much more) can be transferred into an XML format and stored, for example, in a file or database.

Especially extensive user interfaces, which are composed of many simple elements, are ideal for this purpose. By specifying the order and special properties filters, you can customize the serialization process.

To the product page

Example GUI:



Simple and powerful timetracking for vtiger CRM


Technologies: .NET (C #), REST-based web service client

With the help of the "Timecontrol" module, the well-known open-source CRM ( http://www.vtiger.com/ ) system can easily be extended to include the possibility to record working hours and assign them to any objects in CRM. Unfortunately, the module is awkward to use and its functionality is immature. In addition, the operation is done in the browser and requires a login process.

Based on the previously developed vTiger Client Library and modeled on the Anuko Tracker ( http://www.anuko.com/ ) I designed the Windows timetracker for vTiger. This runs inconspicuously and permanently during working hours, can be minimized if necessary in the task bar, from where he occasionally informed about running times or its status. Once provided with credentials, eliminates the cumbersome login process, or is automated.

Also automated is the intelligent synchronization process, which provides data in the absence of Internet connection (eg working on the road) offline, caches entries and transmits later. Data reconciliation for changes to data on the server (vTiger) or the client (Tracker) is easily possible in both directions. The tracker offers many more functions (eg warning messages when time quotas are exceeded) that are easy to use and fully configurable.


A product variant is available from the Open Source Modules Downloads UG .

Genetic algorithm for position determination in parallel kinematics


Technologies: .NET (C #), C ++

Identifying the position and orientation of an end effector relative to the robot base is called "direct kinematic problem" (DKP) in robotics. While this is very easy to determine in the case of serial kinematics, so-called closed kinematic chains, with a parallel arrangement of the mechanical components, lead to calculations becoming very complex. To circumvent this problem, approximate solutions are available that make use of the simple solvability of the reverse inverse kinematic problem (IKP). Description of the functions IKP and DKP for this case:

  • IKP (easily detachable)
    • Input: Spatial coordinates X, Y, Z, Roll, Pitch, Yaw
    • Output: Drive positions on the base platform
  • DKP (difficult to detach)
    • Input: Drive positions on the base platform
    • Output: Spatial coordinates X, Y, Z, Roll, Pitch, Yaw

The calculation of the DKP coordinate vector (6 values) using a so-called real-coded genetic algorithm with the aid of the IKP proceeds as follows:

  • Rate a lot of random space co-ordinates with meaningful delimitation of the solution space. This is the initial population of the genetic algorithm.
  • The initial population, together with a weighting function (Euclidean distance of two vectors), is the input for the sequence, which is repeated until the accuracy of the best candidate is sufficient, or a maximum number of iterations is achieved:
    • Select two good candidates x times random (calculation IKP, comparison with drive positions and rating) from the population, where x is the number of candidates. Form a progeny x times by merging the two candidates (joining 12 coordinates to 6 coordinates with random crossover .
    • Mutate the values ​​of the offspring (decision randomly) and put this into a new candidate list.
    • Check the result (abort criterion) and use the new list gfs. for the next iteration.

One particular enhancement is the different mutation of coordinates in each iteration, a heuristic technique known as simulated annealing . The algorithm calculates a set of coordinates consisting of 6 values ​​with an accuracy of at least 6 decimal places (nm) in well below 100ms (2.5 GHz CPU).

Service Based Assembly Control (SACO)


Technologies: .NET (C #), GUI, Network Programming (WCF, UDP Unicast / Multicast), XML

SACO ( Service-Based Assembly Control) is a distributed software package that facilitates the creation and use of services based on Windows Communication Foundation (WCF) technology. Services created for SACO focus on providing interfaces for using PC-controlled devices or low-level machines connected to different computers on a local area network (LAN). Simply put, devices connected to a PC can be shared with other PCs.

SACO was developed with the objective of forming the basis for a distributed production control system in the future.

SACO consists of three components:

  1. The SACO platform manages services that are integrated as plugins.
  2. The SACO Client Library enables easy localization and instantiation of a service.
  3. The SACO User Auth Library performs an authorization check to protect against unauthorized control.

Techniques and Features:

  • Advantages over WCF
    • Very easy configurability of the services with XML: Usual settings required in WCF (eg address, behavior and binding) are completely eliminated.
    • Automatic service resolution : The location of a service can be resolved by a unique name without knowing its IP address (client-server or multicast mode).
    • User authentication security mechanisms: No Windows credentials are required and no validator needs to be implemented. It is possible to carry out an authorization on the methodological level of the service (flexibility).
    • Controlled hosting with a clear user interface.
  • Dynamically enable and disable the services
  • Integration and exchange of (new) services (plugins) during program runtime (extensibility).
  • Automatic version control of client and service.
  • Automatic concurrent client access synchronization
  • Open architecture and modular design.
  • In principle, no limitation in the number of simultaneously running and networked platforms (scalability).
  • Dummy services for the "offline" use of services: Even if devices are not connected, the services worked and can thus be used for simulations.
  • Detailed logging (GUI, File).

SACO was developed under my lead at the Fraunhofer IPT and is used there in the Production Machines (Automation) department.

Screenshot of the SACO platform:

Screenshot of a page of the API Documentation of a robot control service (created with Doxygen ):

eLearning platforms


Within the scope of a consulting contract, the aim was to deliver a product recommendation for a learning content management system (LCMS) within a short time for a customer project that is as close as possible to customer requirements. The challenge was that the market for LCMS systems is generally highly competitive and very confusing with a large number of products.

Since requirements can not be directly compared with product properties, a rating system with categories and special selection criteria had to be developed first. By using weighting factors, different scenarios could be compared at the end by changing the weighting.


  • Analysis and completion of customer requirements
  • Development of a category list with selection criteria and a rating system
  • Creation of a market overview and a rough selection of providers
  • Defining a set of candidates and evaluating each criterion
  • Preparation of a project report with a product recommendation

For the first orientation, a use case diagram has been created for LCMS functions and their user groups:

Detail of selection criteria table (Excel):

Result with special emphasis: The winners were the systems CLIX and ILIAS:

The ILIAS system (Integrated Learning, Information and Cooperation System) under GPL has been developed by the University of Cologne since 1997/1998. The LMS CLIX is offered by IMC AG (founded in 1996 as a spin-off of the University of Saarland) and exists in the variants CLIX Enterprise, CLIX Campus and CLIX Start.

Vtiger .NET webservice client library


Technologien: .NET (C#), HTTP Client, MD5, Json

Nach dem Vorbild der vtiger webservice library (http://forge.vtiger.com/projects/vtwsclib) wurde in diesem Projekt (VTNetClient) eine Bilbliothek zur Kommunikation mit der REST-basierten vtiger-API für .NET entwickelt. Technisch werden dabei Webservice-Methoden über HTTP-POST und -GET Anfragen aufgerufen. Die Übersetzung dieser Methoden in eine übersichtliche und gut strukturierte .NET-API erleichtert das Zusammenführen von .NET Anwendungen mit dem vtiger CRM.

Techniken und Features:

  • Methoden zur Manipulation von Daten in vtiger Modulen (z.B. create, retrieve, update, delete [CRUD], query).
  • Generelle Invoke Methode, mit der alle REST Methoden verwendet werden können (auch zukünftige).
  • Umfangreiche API- und Entwicklerdokumentation mit Beispielen zur Verwendung.


Prinzip der Verwendung: Eine Anwendungsklasse (app class) referenziert die VTNetClient Bibliothek, die Methodenaufrufe in HTTP GET/POST Anfragen übersetzt:


Screenshot der HTML API Dokumentation (erstellt mit Doxygen):


Screenshot einer Seite der Entwicklerdokumentation (Methoden mit Beispiel Quellcode):

PHPBB3 Integration (Symfony)


Technologien: PHP, phpBB3, Symfony, Datenbanken (MySQL)

Bei diesem kleineren Projekt ging es um die Integration des phpBB3 Forums in eine mit Symfony erstellte Webseite. Symfony (http://www.symfony-project.org) ist ein Open-Source Web Framework, das auf dem Enwurfsmuster Model-View-Control (MVC) basiert und Webentwicklung stark vereinfachen kann.

Hintergrund der Webseite ist ein Mitgliederverzeichnis einer Verbindung. Mit der Zielsetzung, dass sich die Mitglieder in Bezug auf Zugehörigkeiten zu Zirkeln und Mitgliedschaften in Vereinen in entsprechenden Foren austauschen können, sollte sich eben diese Struktur der Mitgliedschaften auch im Forum wiederfinden.

Techniken und Features:

  • Synchronisation der Benutzer- und Mitgliedschaftsdaten zwischen Symfony und phpBB3.
  • Automatisches anlegen von Kategorien und Foren sowie Konfiguration von Benutzerrechten durch Manipulation der phpBB3 Datenbank.
  • Single-Signon (SSO)

phpBB3 Forum mit Kategorien und entsprechenden Foren für Mitgliedschaften in Vereinen bzw. Zirkeln:

Procalysis eTest


Technologien: Java, JSP/Servlets, XML, HTML/CSS, Javascript, SWT, JFace, Datenbanken (Apache Derby/Java DB, HyperSQL, MySQL, Postgresql)

Auch eTest basiert wie HRV-Lab im Kern auf Procalysis Signal. Statt der Verarbeitung von Signaldaten geht es hierbei jedoch um die Analyse und Verarbeitung psychometrischer Daten aus Fragebögen. Diese Daten werden durch eine Testdurchführung im Web-Browser überhaupt erst erfasst.

Techniken und Features:

  • Anhand einer XML basierten Testdefinition stellt ein Webserver eine Testumgebung bereit, die von unterschiedlichen Clients (Computern) mit Hilfe eines beliebigen Web Bowsers aufgerufen werden kann. Dies funktioniert im lokalen Netzwerk oder im Internet.
  • Damit mehrere Benutzer gleichzeitig Tests durchführen können, werden vom System mehrere Sessions verwaltet. Jede Session erhält eine PIN, die der Benutzer vorab eingeben muss. Hierdurch können später Testergebnisse wieder den Personendaten zugeordnet werden.
  • Alle zu speichernden Datenobjekte werden anhand der Benutzerdaten automatisch strukturiert, verschlüsselt und in einer Datenbank (durch Verwendung des Procalysis Datenportals) abgelegt.
  • Auswertung: Neben einer individuellen Testauswertung mit testeigener Logik werden Übersichtstabellen, Graphen der numerischen Antwortwerte, Reaktionszeiten sowie deskriptive Statistiken (Boxplot) über die gesamten Testungen erstellt.
  • Auswertungsergebnisse können als PDF Report gespeichert werden, der Übersichts- und Ergebnistabellen zu jedem Test enthält.

Procalysis® eTest kam im Rahmen verschiedener wissenschaftlicher Studien zum Einsatz und wird derzeit als marktreifes Produkt von der Simplana GmbH (www.simplana.de) angeboten.

Diagramm zur Ausführung im Netzwerk:

Hauptfenster von eTest als Modul von Procalysis (Dialog: Testauswahl für die nächste Session, hinten: Übersichtstabelle laufender Sessions):

Ansicht eines Tests im Browser (oben rechts: Kontrollpanel zur Navigation):

Procalysis HRV Lab


Technologien: Java, SWT, JFace, Hardware (Polar, Suunto), digitale Signalverarbeitung (DSP)

Bei dieser Software handelt es sich um eine Produktvariante, die aus Procalysis Signal / Biomed entstand. HRV Lab ist ein kombiniertes Hard- und Softwarepaket zur Analyse der Herzratenvariabilität (engl.: Heart Rate Variability, HRV). Damit ermöglicht die Software eine minimal belastende Diagnostik der Parasympathikus-Sympathikus Interaktion. Als Hardware können Brustgurte von Suunto (Memory Belt) und Polar (Wearlink) verwendet werden, die Daten der zeitlichen Schwankungen der Herzschlagabstände wahlweise für längere Untersuchungen speichern oder für kurze Untersuchungen auch direkt drahtlos übertragen können. HRV Lab bietet die folgenden zentralen Features:

  • Echtzeit-Übertragung und Aufzeichnung der Polar Daten über die Soundkarte eines PCs. Damit ist keine zusätzliche teure Hardware zur analog-digital Wandlung mehr nötig.
  • Auslesen der Suunto Speicherdaten durch Nutzung der Suunto USB Bibliothek.
    Erzeugung der HRV Daten
    • Aus Suunto und Polar Daten können direkt HRV Signale zur weiteren Verarbeitung generiert werden.
    • Auch aus generischen EKG Daten kann durch einen speziellen, hochpräzisen Wavelet Algorithmus ein HRV Signal erzeugt werden.
    • Eine automatische Artefakt Bereinigung der HRV Daten führt zu präzisen Ergebnissen, selbst bei schlechter Signalqualität.
  • HRV Analyse auf „Knopfdruck“
    • Alle klinisch relevanten Kennwerte, sowie zusätzliche komplexe Analysen (z.B. Zeit-Frequenz Verteilung und Recurrence Plot) werden automatisch aus einem bereinigtem HRV Signal berechnet.
    • Es wird ein 4-seitiger PDF Report erzeugt, im dem alle Analyseergebnisse optisch ansprechend dargestellt werden.

Procalysis® HRV Lab kam im Rahmen verschiedener wissenschaftlicher Studien zum Einsatz und wird derzeit als marktreifes Produkt von der Simplana GmbH (www.simplana.de) angeboten.

Hauptfenster von Procalysis HRV Lab: EKG Signal mit markierten R-Zacken (oben links), Wavelet Time-Frequency-Distribution (rechts), Recurrence Plot (unten links)

Erste Seite des PDF Reports:


Procalysis Signal und Biomed


Technologien: Java, SWT, JFace, XML, Datenbanken (Apache Derby/Java DB, HyperSQL, MySQL, Postgresql), digitale Signalverarbeitung (DSP), diverse Bibliotheken

Procalysis® („Process analysis“) ist ein modulares Softwarepaket zur einfachen Signalanalyse mit dem Schwerpunkt der Verarbeitung biomedizinischer Zeitreihen. Nach einem ersten Prototypen während meiner frühen Studienzeit konnte ich die Software im Rahmen meiner Diplomarbeit grundlegend überarbeiten und verbessern. Zu den Highlights gehören:

  • Intuitive Anwendung komplexer DSP Funktionen (z.B. FFT, Filter oder Wavelets) ohne Programmierkenntnisse.
  • Die Verarbeitung sehr großer Datenmengen (z.B. hochauflösende Zeitreihen im Gigabyte Bereich) wird durch zwei Mechanismen unterstützt.
    • Eine effiziente Speicherverwaltung mit extrem einfacher API verwendet randomisiertes Paging und Memory Mapped Files. Es werden nur jeweils kleine Bereiche des Datenobjekts im Speicher gehalten, während sich der Großteil der Daten in Dateien befindet. Die Verwaltung wurde mit der Zielsetzung entwickelt, auch noch bei konkurrierendem Zugriff (Multithreading), möglichst effizient zu arbeiten.
    • Ein spezieller Darstellungsalgorithmus skaliert optimal mit steigender Signalgröße und ermöglicht Echtzeit Zoom- und Scrollfunktionen. Für unterschiedliche Detailgrade werden hierfür zusätzliche Informationen berechnet, auf die dann statt der Originaldaten zugegriffen wird.
  • Makros oder „Click’n’Code“: Benutzer können ohne Programmierung zum Zwecke von Serienanalysen an einem Beispieldatensatz Vorgänge ausführen, die das Programm später bei beliebig vielen Objekten nachahmt. Die einfache Kombination elementarer Funktionen schafft somit höherwertige, komplexe Funktionen. Dessen automatisierte Anwendung führt zu einer imensen Arbeitserleichterung.
  • Skripte: Zur Erweiterung der Software können Skripte programmiert werden, die sich auch fest in das Programm einbinden lassen. Hierfür kam die Skriptsprache Beanshell (www.beanshell.org) zum Einsatz. Zur komfortablen Programmierung wurde ein Skript-Editor mit Syntax-Highlighting und Content Assistant entwickelt.
  • Datenportal: Zur einfachen Datenorganisation können Daten strukturiert in einer internen oder externen Datenbank abgelegt werden. Hierfür wurde ein spezielles Datenbankschema entwickelt, das hierarchische Strukturen zusammen mit Signaldaten und Zusatzinformationen verarbeitet. Eine abstrakte Datenhaltungsschicht ermöglicht die Verwendung unterschiedlicher Datenbank Systeme.

Obwohl Procalysis ca. 40 verschiedene Bibliotheken verwendet, ist ein Großteil der DSP- und Analysefunktionen in Eigenentwicklung entstanden.

Procalysis Signal / Biomed kam im Rahmen verschiedener wissenschaftlicher Studien zum Einsatz und wird derzeit als marktreifes Produkt von der Simplana GmbH (www.simplana.de) angeboten.

Hauptfenster von Procalysis: Signal Tabs (oben), Kennwerte (rechts), Datenportal (unten):

Der Skripteditor:




A portable, lightweight, open-source .NET standard library for implementing IEEE 11073 SDC Family devices | 4/29/2021

Honestly, I didn't think I would give it another shot, but here is my latest (and ... Read More

Truly portable, zero-dependency, lightweight .NET standard Http server. | 12/27/2020

HttpIot is my latest project, a truly portable, zero-dependency, lightweight .NET ... Read More

OaSharp (OpenAPI Sharp)
An OpenAPI / Swagger C# REST server code generator and hosting .NET standard library | 5/21/2020

My first attempts with C# server code generation for OpenAPI failed catastrophically. ... Read More

More Blog Entries