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
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
- GNU Arm Embedded Toolchain, Catch 2, CMake, git
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.
- C++, C, Python, Bash
- GCC, Clang, CMake, GNU Make, git
- Linux, Android, iOS
- x86, x86-64, ARMv7, ARMv8 (aarch64)
March 2017 - April 2018
deepstream.io C++ Client
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.
December 2016 - February 2017
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.
Python 2, Python unittest, NumPy, SciPy, Cython, METIS, git, CMake
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.
September 2015 - March 2016
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).
Matlab, METIS, C99, git
January 2013 - May 2015
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.
October 2009 - March 2012
Software for modeling and visualization of product-service systems
Details (in German)
C# 3.0, Windows Presentation Foundation, .NET framework
April 2009 - September 2009