I have used C# to solve small and interesting problems, general utility helpers at work, and a handful of more serious programs. My skills in C# have grown over the years as I expand into projects with greater user bases. My “flagship” effort in C# is a data analysis platform built at Allison Transmission.
Platform for Exploratory Multivariate Time Series Analysis (2020)
This was a custom data analysis platform built with a C# backend. The C# backend was originally built to provide a parsing library which could read our custom “Datalog” file format. This is a proprietary binary storage format which relies heavily on compressed data pages. The original parser was wired up to an Excel/VBA workflow via an XLL add-in. Once the need was great enough, this C# code was then wrapped with a proper server and a front end. Internally, this tool is called
shift(y) since it originally analyzed transmission shifts.
Features of the C# back end:
- Codebase spans 30k LOC which includes extensive unit tests on the data parsing and custom calculation engine
- Server runs as a local executable on the user’s machine and auto updates using the Squirrel library
- Features are split between instant analysis on a given file and maintaining a database of results over a large number of files
- Instant analysis includes:
- Querying data files for charting and other front end tasks - high performance code optimized for parallel execution
- Frequency analysis techniques using FFT
- Database and stored results includes
- Decomposing a data file into events based on a custom calculation syntax
- Storing results and metrics for events that were found using the same syntax
- Calculation syntax is stored in an
iniformat and has formulas that are consistent with Excel naming. Parsing engine built using Superpower.
- Data parsing code was regularly consumed by other tools in Matlab and Python via .NET Interop.
To read about the React/TypeScript front end, check out the React Portfolio.
Excel add-in (XLL) for Unit Conversions (2017)
This is a C# built Excel add-in (XLL) which provides unit conversions based on a database of unit types. It parses units from a string and converts them to a common SI form. From there, it can convert to any desired output form that is dimensionally consistent with the input.
To check out this work, head over to Github.
Excel add-in (XLL) to track calculation dependencies in a spreadsheet (2017)
This C# based add-in (XLL) provides a number of functions to walk through the calculation chain in Excel. The goal of these functions is to allow you to audit and inspect how a given cell arrives at its result. The calculation chain is walked until all preceding cells are resolved to constants.
Check out on Github.
LabView Sequence Editor (2017)
This was a tool I built while working at TDA Research. We used a significant amount of LabView code to drive our experiments. Part of this workflow was a custom sequence syntax which was used to control experiments. This syntax was previously edited in a text editor. I created a custom editor which took advantage of the syntax and file structures to provide a better editing experience.
Check out on Github.
Process Data Gatherer to Replace FTP (2009)
In my first internship, I built a C# program to gather process historian data to replace an old school mainframe request and FTP system. The program was built to look at archive files stored on the intranet (backups of historian data) and process them to yield the desired data. Information was stored per tag and read from the raw storage format. This required a fairly nasty conversion from one style of float storage to modern day float storage. Once the data was pulled into the program it was plotted using Microsoft Charts. There was also an option to export the data to Excel via Interop with some of the formatting and analysis handled on the transfer.
last.fm scrobbler (2008)
This was a side project built mostly to experiment with WPF. It dialed in to the iTunes event library and tracked songs that were playing and scrobbled them at the half way point. The program also made requests to last.fm to provide some data and context about the currently playing song (related artists mostly). Other features included:
- queue and historical log so that offline scrobbles could be made after the fact
- program had an updater that could run alongside and pull down fresh updates
- maintained its own database of songs that were played and provided some analytics of that data (this never got as far as I hoped)
- made extensive use of templates and data binding to get a web like interface
block game solver via genetic algorithm (2008)
There is a game out there that I always loved to play. It still exists in some version: touch a colored group of blocks and they disappear. The surrounding blocks fall vertically and usually close horizontal gaps when a column is cleared. Rinse and repeat until the board is clear or only single colors remain. I also used to think I was good at this game until I built this program which could find near optimal solutions using genetic algorithms. This program will get revitalized and ported over to a web solution so that I can do some interesting d3 visualizations with it.
Excel Interop work
With a strong background in Excel / VBA programming, it is fairly natural to also tend to use the Excel Interop libraries when the chance arises. I have been used that knowledge to answer questions on Stack Overflow and have also written real code in this realm. The most recent example was a helper tool at the plant which processed scraped some HTML and sent the data to Excel. It was the basis for a visualization helper in Excel. The HTML probably could have been scraped from VBA, but I never thought of it at the time.
Barely worth mentioning all of the utility code that has been written over the years (but I will!):
- file watching programs to track changes on networked locations
Timerbased programs to do who knows what at this point (I used to love putting these in the system tray to just check things)
- Microsoft Charting related programs (I was fairly active on the MS forum answering Chart questions)
- handful of programs to open multiple webpages or process webpages in a work setting where applications did not want to expose an API