Jonathan Schuerger

Software/Algorithm Engineer

Professional Experience

Large-Scale Software

For the past three years I have been the principle investigator and primary developer for a modeling and simulation tool that is used by a large, diverse community of engineers. Two parallel development pipelines (C++ and MATLAB) exist to serve the different needs of the community. The C++ version (~500k lines) allows users to simulate very complex scenarios in reasonable run-times while the OO MATLAB version (~300k lines) simplifies the development and debugging process for users who are not software engineers.

The same capabilities must exist in both versions which requires that code initially developed in C++ be translated to MATLAB and vice versa. The translated code is optimized for the respective version to maximize run-time performance. Some slower, more complex algorithms are also threaded (particularly in MATLAB) to improve speed. Continuous cross-validation between versions is required to ensure additions/modifications have not affected results.

A common configuration format is used to allow configuration files to be seamlessly swapped from one version to another. This minimizes the overhead imposed on users and allows them to focus on algorithm development and results analysis.

UI/UX Development

As part of a radar R&D effort, I was tasked with developing a real-time visualization and analysis tool that was required to receive and process data in real-time to support a customer capability demonstration. I used Qt and the MVC (model-view-controller) design pattern to develop the UI which had to interface with several existing signal processing algorithms written in C++, Fortran, and MATLAB. I leveraged the MATLAB engine to create a pipeline from the UI to MATLAB to perform necessary signal processing. Results from the signal processing and other algorithms were displayed in custom widgets which could be configured by the user. Some of the widgets included a PPI tracker, POV tracker, 1D plots and 2D "imagesc" using OpenGL.

The tool could also be run in analysis and playback modes offline to examine performance of signal processing algorithms against previously collected data. The analysis mode allowed users to adjust parameters of this signal processing and re-run data to assess how algorithms would have performed (given certain parameters) during a real-time demonstration.

Algorithm Development & Data Analysis

For a large part of my professional career I have been developing advanced signal processing algorithms for sensor systems. Large datasets (either collected or simulated) are required to assess the performance of each algorithm under development. To support rapid prototyping and improve efficiency, I created a development architecture that integrated a MySQL database with MATLAB utilizing the MyM interface. Throughout parts of the MATLAB processing code, information and results would be pushed to the database. Analysis scripts were developed to pull filtered results from the database for qualitative and quantitative assessments. The development architecture became a standard across several programs within the company.

Independent Projects

Android Game Development

When mobile apps and games first came out I became very interested in how to create one myself. I decided that creating a game would be the best way to expose myself to Android technology and enhance my Java programming skills.

I started with a game called Chicken Frenzy which was a very simple game in which users tried to touch all the moving chicken heads in a scene before time ran out. Special bubbles would appear during play provided bonuses (additional time, slowing down chickens, reomoving chickens, etc.) if touched in time. There were also bubbles that would add negative effects (reducing level time, adding chickens, speeding up chickens, etc.). The provided image (top-right) shows a screenshot of Chicken Frenzy. Developing Chicken Frenzy was very enjoyable and furthered my interest in Android game development.

After finishing Chicken Frenzy, I had the desire and necessary skills to develop a more complex game. I started to write a game called Demolition. The goal in Demolition is to move all the safes from different parts of a building into an escape truck waiting below. To move the safes, the user places bombs in various parts of the building. When the user sets a bomb off, the explosion causes pieces of the building break creating openings for the safes to get to the truck. As the level difficulty increases, maneuvering the safes to the truck becomes harder. The provided image (bottom-right) shows a screenshot of Demolition. The game leverages the lidGDX framework and uses Box2D as the physics engine. Levels were developed via a Box2D GUI and exported in JSON format. Demolition loads the JSON level files and creates the levels (e.g building pieces, safes, truck, etc.) dynamically.

Feel free to check out my Demolition code repository on GitHub (I apologize for that lack of comments).

Qt Desktop Application Development

To gain a better understanding of UI development, I thought it would be fun to design a Poker game and analysis tool using Qt. The game aspect is based on Caribbean stud poker. In Caribbean stud the player is dealt 5 cards face up and must decide whether their hand can beat the dealers hand. The catch is that only 1 of the dealer's cards is showing. The game allows you to change your ante value or reset your bank roll at any time. A progressive jackpot (increases as a function of time) is displayed at the top and is paid to the player if the player gets a royal flush.

The application has three main components: the playing table or game area, player analysis plots and a table containing this history of all hands dealt. The two provided images show screenshots with differet views of the application. The plots are intended to allow the player to assess their performance over time. The plots include a bank roll, winning percentage and dealer's qualifying percentage. Each row of the table contains information about a hand including the player's cards, the dealer's cards, outcome, bet, and bank roll.

About Me

When I'm not working or developing apps, I spend as much time as possible with my wife and our 2-year-old daughter. We love going to the beach and zoo. In my free time I enjoy playing hockey and watching football. I'm also trying to get better at disc golf but I think it will be a long process. When time allows, I enjoy trying new restaurants in San Diego and trying to stay up to date on the newest IPAs.