NanoNet - simple Java neural network library

Using backpropagation and sigmoid activation function. | 4/14/2019

NanoNet is a very simple Java neural network library using backpropagation and sigmoid activation function. I wrote the code a while ago for educational purposes.

https://bitbucket.org/besting-it/nanonet


Java async/await nonblocking code library

Write sequential style nonblocking code using a fixed threadpool with Async-Complete for Java | 4/1/2019

Async-Complete (aka Async-Await) is a library for writing asynchronous code in a more sequential style. It provides executing async, background and event-based code using a bounded or unbounded thread pool, unchecked exception handling and easy scheduling and cancelling of (recurring) tasks.

Licensed under the Apache License, Version 2.0.

https://bitbucket.org/besting-it/asynccomplete


SDCLib/J contribution fork

Contributing to IEEE 11073 SDC Family java webservice stack | 2/2/2019

As former main author of the official project in my last job at SurgiTAIX AG, I will maintain this fork to implement the newest features and bugfixes for research and testing purposes. Via pull requests I will contribute my work to the official project.

For more information, please refer to https://bitbucket.org/besting-it/sdclibcontrib/src/


LambdaLink - Distributed INotifyPropertyChanged events for .NET

.NET webservice library | 2/2/2019

LambdaLink is a small library for propagating .NET INotifyPropertyChanged events over network connections. Licensed under The MIT License.

Version 1.0 is out, For source code and documentation refer to https://bitbucket.org/besting-it/lambdalink/src/


DocuCast

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!


jReflect: lightweight java web-server & -framework

3/7/2014

jReflect is a very small & lightweight java web-server and -framework for creating (distributed) pure java web applications.

It has been released as open source under the MIT license.

Go to the project page, or download diretlcy from sourceforge.


RoadReader

Get webpage contents with high-speed despite low bandwidth connection | 2/23/2014

RoadReader is an online proxy HTML-Reader with the goal of tranferring a minimal amount of data with high-speed while preserving most of the readable information. It can be used to surf the web using ultra-low bandwidth connections (e.g. bad mobile connections).

Features

  • Requested webpages are read out on the RoadReader server using an HTTP client
  • Processing
    •  HTML is cleaned from any junk & media
    • Useful information is extracted & content is reformatted (optimized for common news pages)
    • All hyperlinks are adjusted to refer back to the RoadReader server
  • The final HTTP response is compressed using gzip with respect to RFC 2616
Screenshots
 

Link

The server has been shut down for the time being.

 

SimpleRAII

Tiny C++ garbage collection helper library | 1/5/2014

SimpleRAII is a tiny garbage collection helper class that eases the use of the RAII idiom (Resource Acquisition Is Initialization).

I released it some time ago, find out more!

 

jSomaPlayer

100% Java player for the soma fm web radio | 1/4/2014

jSomaPlayer has been released: it is an open source pure java player for the soma fm web radio.

I wrote it to build a WiFi radio using a Raspberry Pi, so the player software needed to be able to run in command-line mode. The plan was to get the radio casing a kind of retro look. Since a display (showing stream and title info) would just have looked bad, jSomaPlayer can be queried and controlled remotely from anywhere in the network - with a GUI of course.

If you like to know more about jSomaPlayer, click hereOr go directly to the sourceforge page.

 

Pictures of the WiFi radio

Link to soma fm

SomaFM commercial free internet radio

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

10/8/2013
Technologien: .NET (C#), Windows Forms, Reflection, XML

UIPSnap (User Interface Property Snap) ist eine Software-Bibliothek zur Speicherung und Wiederherstellung des Zustands von .NET Forms Benutzeroberflächen. Mit nur wenigen Zeilen Code können Eigenschaften sämtlicher in einer Form befindlichen Controls (z.B. Position, Größe aber auch Selektionen und vieles mehr) in ein XML-Format übertragen und z.B. in einer Datei oder Datenbank gespeichert werden.

Besonders umfangreiche Benutzeroberflächen, die aus vielen einfachen Elementen zusammengesetzt sind, eignen sich hierfür hervorragend. Durch das Festlegen der Reihenfolge und spezieller Eigenschaften-Filter lässt sich der Serialisierungs-Vorgang beliebig anpassen.

 

Zur Produktseite

 

Beispiel-Code:

UIPSnap snap = new UIPSnap();
string xml = snap.toXML(this);
File.WriteAllText("uistate.xml", xml);

 

Beispiel-GUI:

 

 

Einfache Windows Zeiterfassung für das vTiger CRM

4/9/2012

Technologien: .NET (C#), REST-basierter Webservice-Client

Mit Hilfe des „Timecontrol“-Moduls lässt sich das bekannte Open-Source-CRM (http://www.vtiger.com/) System leicht um die Möglichkeit erweitern, Arbeitszeiten zu erfassen und beliebigen Objekten im CRM zuzuordnen. Leider ist das Modul umständlich zu bedienen und in seiner Funktionalität unausgereift. Zudem erfolgt die Bedienung im Browser und erfordert einen Loginvorgang.

Auf Basis der bereits zuvor entwickelten vTiger Client Library und nach dem Vorbild des Anuko Trackers (http://www.anuko.com/) wurde von mir der Windows „Timetracker“ für vTiger entworfen. Dieser läuft unauffällig und dauerhaft während der Arbeitszeit, kann bei Bedarf in die Taskleiste minimiert werden, von wo er gelegentlich über laufende Zeiten oder seinen Status informiert. Einmal mit Anmeldedaten versorgt, entfällt der umständliche Loginvorgang, bzw. wird automatisiert.

Ebenfalls automatisiert ist auch der intelligente Synchronisationsvorgang, welcher Daten bei fehlender Internetverbindung (z.B. arbeiten auf Reisen) Offline zur Verfügung stellt, Einträge zwischenspeichert und später überträgt. Ein Datenabgleich bei Änderungen an Datenbeständen auf dem Server (vTiger) oder dem Client (Tracker) ist in beide Richtungen problemlos möglich. Der Tracker bietet viele weitere Funktionen (z.B. Warnmeldungen bei Überschreiten von Zeitkontingenten), die einfach zu bedienen und komplett konfigurierbar sind.

Eine Produktvariante ist erhältich bei der Open Source Modules Downloads UG.

Weitere Software der Kategorie vTiger siehe Produktliste.


Genetischer Algorithmus zur Positionsbestimmung bei einer Parallelkinematik

4/9/2012

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

Die Position und Orientierung eines Endeffektors in Bezug auf die Roboterbasis aufzufinden, bezeichnet man in der Robotik als „Direktes Kinematisches Problem“ (DKP). Während dies bei einer seriellen Kinematik sehr leicht zu bestimmen ist, führen sog. geschlossene kinematische Ketten bei einer parallelen Anordnung der mechanischen Komponenten dazu, das Berechnungen schnell sehr komplex werden. Um dieses Problem zu umgehen, bieten sich Näherungslösungen an, die sich der einfachen Lösbarkeit des umgekehrten, inversen kinematischen Problems (IKP) bedienen. Beschreibung der Funktionen IKP und DKP für diesen Fall:

  • IKP (leicht lösbar)
    • Eingabe: Raumkoordinaten X, Y, Z, Roll, Pitch, Yaw
    • Ausgabe: Antriebspositionen an der Basisplattform
  • DKP (schwer lösbar)
    • Eingabe: Antriebspositionen an der Basisplattform
    • Ausgabe: Raumkoordinaten X, Y, Z, Roll, Pitch, Yaw

Die Berechnung des DKP-Koordinatenvektors (6 Werte) mit Hilfe eines sog. Real-coded genetischen Algorithmus unter Zuhilfenahme des IKPs läuft wie folgt ab:

  • Rate eine Menge an zufälligen Raumkoordinaten unter sinnvoller Eingrenzung des Lösungsraums. Dies ist die Anfangspopulation des genetischen Algorithmus.
  • Die Anfangspopulation bildet zusammen mit einer Bewertungsfunktion (euklidische Distanz zweier Vektoren) die Eingabe für den Ablauf,der solange wiederholt wird, bis die Genauigkeit des besten Kandidaten ausreichend ist, oder eine maximale Iterationszahl erreicht wird:
    • Wähle x-mal zufällig zwei gute Kandidaten (Berechnung IKP, Vergleich mit Antriebspositionen und Bewertung) aus der Population aus, wobei x die Anzahl an Kandidaten ist. Bilde dabei x-mal einen Nachkommen durch Verschmelzen der zwei Kandidaten (Zusammenfügen von 12 Koordinaten zu 6 Koordinaten mit zufälligen Crossover.
    • Mutiere die Werte des Nachkommen (Entscheidung zufällig) und füge diesen in eine neue Kandidatenliste ein.
    • Prüfe das Ergebnis (Abbruchkriterium) und verwende die neue Liste gfs. für die nächste Iteration.

Eine besondere Optimierung ist die unterschiedlich starke Mutation der Koordinaten in jeder Iteration, eine heuristische Technik, die auch als Simulated Annealing („Simulierte Abkühlung“) bekannt ist. Der Algorithmus berechnet einen Koordinatensatz bestehend aus 6 Werten mit einer Genauigkeit von mind. 6 Dezimalstellen (nm) in deutlich unter 100ms (2,5 GHz CPU).


Service Based Assembly Control (SACO)

11/28/2010

Technologien: .NET (C#), GUI, Netzwerkprogrammierug (WCF, UDP Unicast/Multicast), XML

SACO („Service-Based Assembly COntrol“) ist ein verteiltes Softwarepaket, das die Erstellung und Verwendung von Diensten auf Technologie der Windows Communication Foundation (WCF) erleichtert. Für SACO erstellte Dienste haben den Schwerpunkt in der Bereitstellung von Schnittstellen zur Nutzung PC-gesteuerter Gerät oder Maschinen auf unterster Ebene, die an verschiedenen Computern in einem lokalen Netzwerk (LAN) angeschlossen sind. Einfach gesagt: Geräte, die mit einem PC verbunden sind, können von anderen PCs mitgenutzt werden.

SACO wurde mit der Zielsetzung entwickelt, zukünftig einmal die Basis für ein verteiltes Produktionssteuerungsystem zu bilden.

SACO besteht aus drei Komponenten:

  1. Die SACO Plattform verwaltet Dienste, die als Plugins eingebunden werden. 
  2. Die SACO Client Library ermöglicht die einfache Lokalisierung und Instanziierung eines Dienstes.
  3. Die SACO User Auth Library führt eine Autorisierungsprüfung durch um gegen unbefugte Steuerung zu schützen.

Techniken und Features:

  • Vorteile gegenüber WCF
    • Sehr leichte Konfigurierbarkeit der Dienste mit XML: Übliche in WCF benötigte Einstellungen (z.B. Adresse, Verhalten und Bindung) entfallen gänzlich.
    • Automatische Dienstauflösung: Der Ort eines Dienstes kann anhand eines eindeutigen Names aufgelöst werden, ohne dessen IP Adresse zu kennen (Client-Server oder Multicast Modus).
    • Sicherheitsmechanismen zu Benutzerauthentisierung: Es sind keine Windows Credentials nötig und es muss kein Validierer implementiert werden. Es ist möglich, eine Autorisierung auf Methodenebene des Dienstes durchzuführen (Flexibilität).
    • Kontrolliertes Hosting mit übersichtlicher Benutzerschnittstelle.
  • Dynamisches Aktivieren und Deaktivieren der Dienste
  • Einbindung und Austausch von (neuen) Diensten (Plugins) zur Laufzeit des Programms (Erweiterbarkeit).
  • Automatische Versionskontrolle von Client und Dienst.
  • Automatische Synchronsation bei gemeinsamen Clientzugriff (Thread-Mutex)
  • Offene Architektur und modularer Aufbau.
  • Prinzipiell keine Limitierung in der Anzahl gleichzeitig laufender und vernetzter Plattformen (Skalierbarkeit).
  • Sehr hohe Performance durch Nutzung des UDP Netzwerk Protokolls.
  • Dummy-Services zur „Offline“-Nutzung von Diensten: Auch wenn Geräte nicht angeschlossen sind, funktionierten die Dienste und lassen sich so zu Simulationen nutzen.
  • Ausführliches Logging (GUI, File).

SACO wurde unter meiner Leitung am Fraunhofer IPT entwickelt und wird dort in der Abteilung Produktionsmaschinen (Automatisierung) eingesetzt.

Screenshot der SACO Plattform:

Screenshot einer Seite der API Dokumentation eines Dienstes zur Robotersteuerung (erstellt mit Doxygen):


eLearning Plattformen

11/28/2010

Im Rahmen eines Consulting Auftrags ging es darum, innerhalb von kurzer Zeit für ein Kundenprojekt eine Produktempfehlung für ein Learning Content Management System (LCMS) abzugeben, die möglichst genau im Einklang mit den Kundenanforderungen steht. Die Herausforderung bestand darin, dass der Markt für LCMS Systeme generell hart umkämpft und mit einer hohen Anzahl von Produkten sehr unübersichtlich ist.

Da Anforderungen nicht direkt mit Produkteigenschaften verglichen werden können, musste zunächst ein Bewertungssystem mit Kategorien und speziellen Selektionskriterien ausgearbeitet werden. Durch die Verwendung von Gewichtungsfaktoren konnten am Schluss durch Veränderung der Gewichtung verschiedene Szenarien gegenübergestellt werden.

Techniken:

  • Analyse und Vervollständigung der Kundenanforderungen
  • Ausarbeitung einer Kategorieliste mit Selektionskriterien und eines Bewertungssystems
  • Erstellung einer Marktübersicht und einer Grobauswahl von Anbietern
  • Festlegung auf eine Menge von Kandidaten und Bewertung der einzelnen Kriterien
  • Anfertigung eines Projektberichts mit einer Produktempfehlung

Zur ersten Orientierung wurde ein Anwendungsfalldiagramm für LCMS Funktionen und deren Nutzergruppen erstellt:

Ausschnitt der Selektionskriterien-Tabelle (Excel):

Ergebnis mit spezieller Gewichtung: Die Sieger waren die Systeme CLIX und ILIAS:

Das unter GPL stehende System ILIAS (Integriertes Lern-, Informations- und Arbeitskooperations-System) wird seit 1997/1998 von der Universität Köln entwickelt. Das LMS CLIX wird von der IMC AG angeboten (1996 gegründet als Spin-Off der Universität des Saarlandes) und existiert in den Varianten CLIX Enterprise, CLIX Campus und CLIX Start.


Vtiger .NET webservice client library

11/25/2010

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):


Blog

NanoNet - simple Java neural network library
Using backpropagation and sigmoid activation function. | 4/14/2019

NanoNet is a very simple Java neural network library using backpropagation and sigmoid ... Read More

Java async/await nonblocking code library
Write sequential style nonblocking code using a fixed threadpool with Async-Complete for Java | 4/1/2019

Async-Complete (aka Async-Await) is a library for writing asynchronous code in a more ... Read More

SDCLib/J contribution fork
Contributing to IEEE 11073 SDC Family java webservice stack | 2/2/2019

As former main author of the official project in my last job at SurgiTAIX AG, I will maintain ... Read More

More Blog Entries