On this page, I briefly describe the major projects I was involved in. My git repository can be found at gitlab.com.

Last update: February 26, 2019

#### Rademacher Floating Point Library

Surprisingly, as of 2018 there was no software available computing random uniformly distributed floating-point numbers. The Rademacher Floating Point Library (RFPL) provides a C++11 class computing random uniformly distributed floating-point values in a given half-open interval `[a,b)`

. In comparison to every other existing software, this library

- draws randomly from
*all*floating-point values in range, - computes values that are actually uniformly distributed,
- avoids round-off errors causing out-of-range values,
- uses only integer arithmetic, and
- works with built-in C++ float types as well with custom floating-point types.

RFPL is licensed under the Mozilla Public License 2.0 and therefore free software ("free" as in "free beer" as well as "free" as in "freedom").

###### Technologies and Skills used

- Numerical analysis, IEEE floating-point arithmetic, complexity theory, automated testing

- C++11, Bash

- GCC, Clang, libstdc++, libc++, Catch 2, CMake, git

###### Project Duration

January 2019 - February 2019

#### Porting Fluent.ai's Wake Word Recognition System to an Embedded System

I single-handedly ported Fluent.ai's wake word recognition system to Arm Cortex-M processors with floating-point unit. One of the deliverables used an existing speech model with four wake words and ran it unaltered at 60 MHz with power consumption in the microwatts range. I did **not** create the machine learning models for Cortex-M.

###### Technologies and Skills used

- Numerical analysis, digital signal processing, real-time computing, embedded software programming, algorithmic optimization, automated testing

- C++11
- GNU Arm Embedded Toolchain, Catch 2, CMake, git

###### Project Duration

July 2018 - January 2019

#### Build System Ownership at Fluent.ai

My main responsibility at Fluent.ai was building Fluent.ai's software and its dependencies for development and deployment for current computer architectures including personal computers, the Raspberry Pi, and a wide range of mobile devices.

###### Technologies used

- C++, C, Python, Bash
- GCC, Clang, CMake, GNU Make, git
- Linux, Android, iOS

- x86, x86-64, ARMv7, ARMv8 (aarch64)

###### Project Duration

March 2017 - April 2018

#### deepstream.io C++ Client

deepstream.io C++ Client git repository at GitLab

deepstream.io C++ Client git repository at GitHub

Originally hired as a tech writer, I was solely responsible for the initial deepstream.io C++11 client implementation including WebSockets connectivity, message serialization, message deserialization, and handling of deepstream event as well as user presence capabilities. The client was tested on OS X, Amazon Linux AMI, Raspbian (ARMv7 CPU), and with Travis CI.

###### Technologies used

C++11, GCC, Clang, Clang static analyzer, Flex, Poco C++ libraries, Boost.Test, Travis CI, Valgrind, American Fuzzy Lop, git, CMake

###### Project Duration

December 2016 - February 2017

#### DCGeig

Eigenvalues and their eigenvectors are important tools for analysis in many disciplinces. For example in structural mechanics, eigenvalues and eigenvectors (called eigenfrequencies and eigenmodes) enable the analysis of free vibrations, they can be used for modal superposition, and they are helpful in studying noise, vibration, and harshness (NVH). DCGeig is a solver for large, sparse generalized eigenvalue problems arising, e.g., from finite element analyses of elliptic PDEs or time-discrete hyperbolic PDEs. It computes the smallest eigenvalues and it is especially well-suited if a large number of them is needed. Moreover, DCGeig is a black-box solver meaning it requires only the matrices and the maximum desired eigenvalue for proper operation.

DCGeig is a further advancement of the sparse eigensolver in my master's thesis. Numerical stability was improved further, parallelism was increased, and convergence improved by means of Chebychev polynomials.

###### Technologies used

Python 2, Python unittest, NumPy, SciPy, Cython, METIS, git, CMake

###### Project Duration

Apr 2016 - January 2017

#### Eigensolvers for generalized eigenvalue problems with Hermitian Positive Semi-Definite Matrices

Based on LAPACK, I implemented three solvers for dense problems for my master's thesis:

- a solver deflating infinite eigenvalues before calling the LAPACK standard solver,
- a GSVD-based solver computing the GSVD directly with LAPACK, and
- a GSVD-based solver computing the GSVD by means of QR factorizations and the CS decomposition.

The solvers were written once in C++ with templates so that single and double precision implementations were generated by the compiler. The code was tested in Python. The foreign function interface was done with "extern C" declarations in C++, C headers, and Cython.

The dense solvers were later used in a solver for large, sparse generalized eigenvalue problems with Hermitian positive definite matrices. This work was also part of my master's thesis.

###### Technologies Used

C99, C++11, Python 2, Boost Test, Python unittest, NumPy, SciPy, Cython, METIS, git, CMake

###### Project Duration

September 2015 - March 2016

#### LAPACK

From Wikipedia:

*LAPACK (Linear Algebra Package) is a standard software library for numerical linear algebra. It provides routines for solving systems of linear equations and linear least squares, eigenvalue problems, and singular value decomposition. It also includes routines to implement the associated matrix factorizations such as LU, QR, Cholesky and Schur decomposition.*

I improved the documentation. I found and fixed bug 139.

Languages and tools used:

LAPACK is written in Fortran 77 and Fortran 90. The documentation is generated from Doxygen comments.

#### An eigensolver based on AMLS and SIM

For the DFG research center Matheon project C22 and for the Einstein Center for Mathematics Project D-OT3, I implemented a solver for generalized eigenvalue problems arising from finite element discretizations in structural mechanics based on automated multilevel substructuring (AMLS) and the subspace iteration method (SIM). The findings were used in the paper *Adaptive numerical solution of eigenvalue problems arising from finite element models. AMLS vs. AFEM* (DOI: 10.1090/conm/658/13127).

###### Technologies Used

Matlab, METIS, C99, git

###### Project Duration

January 2013 - May 2015

#### Compiler Back-End

For my bachelor's thesis, I added a compiler back-end generating JavaScript to an existing compiler for the simple functional programming language SL ("simple language").

###### Technologies Used

Haskell98, JavaScript (ECMAScript 5), HTML, git, SVN

###### Project Duration

July 2011 - October 2011

#### Project Forschungskooperation Netzoptimierung (ForNe)

The project was concerned with the develop and implementation of mathematical optimization-based methods for checking realizability of stationary gas flow situations (paraphrased from here). My tasks included

- the statistical analysis of the customer-provided gas network,
- visualizing solutions computed with Lamatto++,
- dynamic visualization of gas flow in a gas network on a map of Germany in Google Earth,
- and aiding research assistants in comprehending and presenting computed solutions as well as gas network properties.

Examples of the visualization can be found in the figures of the article *Gas Network Topology Optimization for Upcoming Market Requirements* on the last page.

###### Technologies Used

C++98, Python 2, CherryPy, Google Earth, KML, XML, OpenGL 1.1, GNU Make, SVN, git

###### Project Duration

October 2009 - March 2012

#### Software for modeling and visualization of product-service systems

Details (in German)

###### Technologies Used

C# 3.0, Windows Presentation Foundation, .NET framework

###### Project Duration

April 2009 - September 2009