Introduction:
- I possess over three decades of experience in software engineering and have a passion for creating solutions, iterating from design to deployment until success, taking responsibility and often leading the effort. I am at home in computer graphics & multimedia, applied math, cryptography, driver development, algorithms and high performance solutions, from complete POSIX systems to bare-metal embedded devices.
- I enjoyed employment at Sun Microsystems (?Oracle) and ATI (?AMD) at their headquarters, thereafter I continued as a contractor. I served a broad range of companies, such as Zafena, Mathworks, Google, Harman/Becker, Siemens AG Munich and IBM Frankfurt.
- Early 2020 I picked up contemporary C++ again for new challenges, covering C++11 to C++23. I utilize cmake, gcc, clang/llvm with sanitizer, valgrind, clang-format, clang-tidy, Catch2, git, Jenkins, GitLab, gerrit, beside others for code review, validation, performance analysis and CI/CD. Some of these projects are:
- Gamp, replicating JogAmp?s experience of GraphUI and overall platform agnostic graphics framework for native platforms using C++20 and for web browser via WebAssembly using emscripten. This work is also based on gfxbox2, evaluating C++20 and the web-target.
- Direct-BT, is a high-performance Bluetooth LE and BREDR host library hooking up to Linux?s kernel BlueZ implementation, circumventing D-Bus and supporting secure client & server modes. It has been used successfully in a medical trial, as well as in a connected medical device terminal. Implemented in C++17/20 to be used directly from native code or via a thin Java layer. Presentations: Latest Blogs, BLE Programming with C++ & Java
- Cipherpack provides encrypted & authenticated (OTA) streaming and atomic file operations used to implement a secure system and application upgrade across a wide range of media for devices in the medical space. Implemented in C++17/20 to be used directly from native code or via a thin Java layer.
- I maintained JogAmp for over a decade, a cross-platform Audio/Video, 3D Graphics and Processing library for Windows, MacOSX, Linux, Android and iOS) on desktop, mobile & embedded systems. While it runs on the Java VM, the implementation layers involve our own compiler, C/C++ and ObjectiveC native system level code. Tasks included low level debugging and performance analysis as well as coding computer graphics, adding a video layer with FFmpeg and stereoscopic rendering with lense correction for OculusVR (slide 47, video 47:15). This culminated to our own resolution-independent GPU NURBS Curve Rendering GraphUI toolkit. Jenkins & JUnit across the target network covered our CI/CD tasks.
- Presentations: Latest Blogs, JavaOne 2008, Tegra-1 Video Demo, Siggraph (2010, 2011, 2012, 2013, 2014), Fosdem (2013, 2014).
- Most of the above projects are open sourced and available on jausoft and github.
- I run a little computer-science class, covering C++ basics, gfxbox2, hanoi, pacman.
- I just started hacking Rust and some AI projects sparked my interest in NN again.
- The following sub-section offers some more excerpts from my background, if interested.
Chronological Background:
- Around 1981 I started learning programming at the age of 13. First I only coded on paper, then on a TI-57, VIC-20, Commodore 64 (C64) and later Amiga 500 using Basic, 6502 & 68k assembly and C with the Lattice C Compiler. My early hacking on the C64 in 6510 assembly included copy-programs, an index database and notorious sound & graphics effects. I also coded a working IRQ-based preemptive multitasking scheduler on the C64 for a never finished core wars programming-game variant as inspired in 1984 by A.K. Dewdney.
- My C++ dates back to 1993, when I started with Bjarne Stroustrup?s Design and Evolution of C++ to implement my OO genetic algorithm design for a game theory assignment.
- Around 1994 I enjoyed writing a UML SDT compiler between dialects for S&P Media, Bielefeld. Then I joined Prekwinkel in Herford to move their CAD implementation from C to early C++ and produced a compiler for an interpreted language. I also realized a drainage DB visualization with editing using AutoCAD.
- Afterwards in 1995 I implemented an embedded sewing machine control system for an 80166 platform for Duerkopp-Adler, Bielefeld. My work included a file system and graphical representation of the CNC data. Here I also maintained a graphical CAD system running on Windows to edit same CNC programs. Notably I shared most of the object oriented code using my own C++ alike template compiler. My first Java experience was in 1996 for IBM Frankfurt, working on enterprise systems implementing DSL toolkits to produce UI elements directly from business case descriptions.
- In 1998 I finally found time concluding my diploma thesis GL4Java, a Java extension exposingnative OpenGL and GLU to the JVM.
- In 1997 I worked on a DSL modem upgrade solution for Siemens in Munich, using SDL/UML and C++98 for the 68k target machine. We used SNMP for event management. I achieved to decouple module development between our teams by introducing white box testing using synthetic data for our API.
- Until 2001 I worked on several C++ and Java enterprise projects as well as tutoring C++ and Java. The projects involved IIOP/Corba Proxy, OO/SQL mappings, 3D-Scenegraph, UML and XMLRPC.
- My automotive experience started in 2001 with Harman/Becker, where I developed QNX and Linux driver for a DSP video board of a HMI unit, enabling video decoding accessible via standard libraries. I added PCI DMA/IRQ management for a Linux/SH4 BSP including disk-less bootloader and evaluated cross-platform UI via QT. Two X11 driver for custom GPU for Linux and QNX (x86, sh4) including blitting and YUV video overlay were added. I realized a remote car control unit using Java and OSGI on a handheld device connecting to the car?s MOST bus plus GPS positioning. I am familiar with Adaptive AUTOSAR guidelines and handled requirement management in 2005.
- At ATI and AMD I followed up with C/C++ OpenGL driver technology for embedded device applications in 2005, focusing on performance OpenGL extensions, hardware overlay, asynchronous ReadPixel, GLSL/DMA texture transfers, page flip, VSync and multi DMA page locks. I enhanced the driver performance about factor 2.5, targeting functional driver blocks like TLS, inlining, caching, dispatch table, stream copy, etc.
- In 2007 I lead the refactoring of the New Java Plug-In with JNLP support for Sun Microsystems in Santa Clara. I also demonstrated an AWT-less proof-of-concept Plugin 3, intended for a relaunch of Java on the desktop and mobile devices. I also contributed to a new experimental JavaFX platform, utilizing hardware accelerated rendering (OpenGL, OpenMax, ..). As a result, I added a platform independent windowing architecture with mobile and OpenGL profile support to JOGL, which later became part of the independent JogAmp project.
- I hold a degree in electrical engineering with a focus on computer science, Dipl.-Ing. (FH) - Diplom Engineer, Applied Science - MASc equivalent, conferred upon me by the Bielefeld University of Applied Sciences, Germany in 1998.
- I live with my wife and two sons and enjoy playing and learning together.
Career:
11/2009 - today:
Role: Software Engineering / Consulting, Sole Proprietor
Customer: jausoft
09/2008 - 11/2009:
Role: Senior Staff Engineer
Customer: Sun Microsystems, Inc., Santa Clara, CA, USA
08/2007 - 09/2008:
Role: Staff Engineer
Customer: Sun Microsystems of Canada, Inc., Edmonton, AB, Canada
06/2005 - 07/2007:
Role: Senior Software Engineer and Team Lead
Customer: Advanced Micro Devices (AMD), formerly ATI, Markham, ON, Canada
09/1991 - 06/2005:
Role: Software Engineering / Consulting, Sole Proprietor
Customer: jausoft
08/1988 - 03/1990:
Role: Civilian Services.
Customer: Communications Center Dodesheide, Osnabrueck, Germany, Europe.
Domains:
- Architecture, design, development, test and deployment (SDLC)
- Computer Graphics and 3D
- Device Connectivity
- Embedded and platform independent development
- High performance and parallel computing
- Project management and maintenance
- Security and Cryptography
- Training
Topics:
- Application integration (EAI, J2EE, XML, XSLT, SOAP, REST, ..)
- Automotive / Adaptive AUTOSAR
- Computer Graphics (3D, linear algebra, ..)
- CAD/CAM integration and DSL Optimizations
- Compiler and interpreter construction
- Controller programming ANSI-C(++) and Assembler
- Cryptography (authenticity & privacy/encryption)
- Device connectivity and security
- DB applications and interfaces (DB2, SQL, JDBC)
- Graphic User Interfaces (GUI)
- Multimedia systems (Player software, decoder, hardware driver (mpeg2, mp2, pcm, a52))
- Network protocols
- BSD Sockets, TCP/IP, MOST, I2C, IPC, CAN, ISDN
- HTTP, WebSockets
- REST API, WOPI, JSON, ...
- RPC, Corba, ...
- Bluetooth LE and BREDR
- Network techniques (DB interfaces for HTML Server,WWW, Proxy, Ftp, News, Email clients, Firewall etc.)
- OO-Design (UML, Rational Rose, Paradigm Plus, C++, Java)
- Optimization engines (Genetic algorithms, Neuronal Networks etc.)
- Organizing and planning
- Parallel Computing, Concurrency (SDL / UML, SIMD / MIMD, OpenMP, OpenCL)
- System analysis and design
- System software
- Network protocols
- Filesystem
- Graphic Card Driver (XFree86, Proprietary, Console)
- Linux Kernel Development (device driver and porting)
- OpenGL, GL ES, driver development
- QN?X Device Driver Development
- Tutoring (C++, Java, Physics/Simulation, Networks)
- Unix administration
Development Environment and Tools:
- API: OpenGL/GLSL, OpenCL, OpenMP, ODBC/JDBC, pthreads, STL, ...
- Bugs/Requirements: Bugzilla, Jira, GitLab, Github, ..., Doors
- DB: MariaDB/MySQL, DB2, dBase, Oracle, ...
- Compiler: gcc/g++, clang/llvm, clang-tools, ...
- Compiler-Compiler: ANTLR, Lex & Yacc (Berkley, MKS, GNU), JavaCC
- Continuous Integration (CI): Jenkins/Hudson, Travis/Gitlab, ...
- Review: Github, gerrit, ..
- Testing: Catch2, CppUnit, GoogleTest, JUnit, ..
- Virtualization: Docker, Linux binfmt misc/chroot/cgroups, ...
- IDE: Eclipse, VSCode, Netbeans, MS-Visual C++, ...
- SCM: GIT, Perforce, Remedy, ClearCase, Change Synergy, CM Synergy; SCCS, RCS, CVS
- UML/OO: Bouml, Rational Rose, Paradigm Plus, Innovator, Telelogic SDT/SDL, ArgoUML, Thorn, Umbrello, ...
Methodology:
- Extreme- and team-programming, Knowledge Transfer
- Requirement Management
- Review, audit and QA procedures
- Static code analysis
- Ru?ntime analysis with code instrumentation
- Object oriented programming (C++, Java and either C)
- Configuration-management, project maintenance
- Usage and implementation of platform independent standard libraries
- OO-Design using UML iteratively
- Tests: BlackBox, WhiteBox, Unit, Continuous Integration, Regression
- UML Analysis and Design (OO, Structured, States, ..)
- SDL specification for multiprocessing / multithreading systems
- Top-Down specification; Buttom-Up implementation
Server Environment:
- Apache, NGINX, Samba, Squid, inn(news), ftpd, routed, ippp, iptables, sendmail, VPN, squid, mysql, git, bugzilla, jenkins, ...
- GNU/Linux Server, Windows clients