I am a graduate student in Computer Science and Engineering at the University of Michigan where I am advised by Westley Weimer. Previously, I was a Ph.D. student in the Department of Computer Science at the University of Virginia and an Olive B. and Franklin C. Mac Krell Fellow at the Jefferson Scholars Foundation. My co-advisors were Westley Weimer and Kevin Skadron. In 2016, I received a Master of Computer Science (MCS) from the University of Virginia. In 2014, I received a B.S. in Computer Science, Mathematics, and German Studies from St. Lawrence University. My academic advisors at St. Lawrence were Ed Harcourt (CS), Dan Look (Math), and Ingrid Stipa (German Studies). In my spare time, I enjoy cooking, hiking, knitting, playing woodwind instruments, photography, and reading.
My current research focus is on programming models for pattern-recognition processors. Collected data is often analyzed in a multitude of different ways, and many algorithms in areas such as data-mining, bioinformatics, deep packet analysis, and spam filtering require identification of exact or near-match character patterns. Special hardware accelerators, such as FPGAs and custom hardware (e.g., Micron's Automata Processor, the Cache Automaton, etc.) can dramatically reduce processing time for these tasks. Programming these devices, however, can be challenging for non-expert users. My goal is to ease the programming burden by providing automated transformations, new language support, and debugging tools, which enable researchers to leverage these performance improvements.
Autonomous vehicles, such as quadcopters and rovers, perform critical tasks for government agencies and emergency services. Missions often take place in locations where communication with human operators is infrequent or delayed, such as distant planets, war zones, and remote crash sites. Consequently, humans may not be able to take manual control to recover the vehicle if the software begins to malfunction. Many of these malfunctions, or software bugs, do not cause total loss of the vehicle, but rather hinder the successful completion of a mission (e.g., a ample is not collected or a camera is not pointed in the correct direction). How can an autonomous vehicle fend for itself when such malfunctions occur?
To help solve this problem, our research group is currently adapting automated program repair techniques to autonomous vehicle applications. Our tool, GenProg, makes use of an evolutionary approach to repairing software bugs in which small changes are incrementally added to the software and tested until a solution is found. After find a repair with GenProg, the next challenge is deployment to the autonomous vehicle. In many situations, it is impossible to stop or change the software running on these devices. Our group is currently developing a solution for directly inserting repairs into running programs using specialized hardware.
Our contributions aim to increase system resiliency for autonomous vehicles, allowing more missions to complete successfully in the face of software defects.
I have developed several tutorials for configuring quadcopter software and hardware. Please see below for links to publicly-available documentation.
While attending St. Lawrence University, I worked along with my faculty advisor, Ed Harcourt, to complete a year-long senior honors research project, entitled Accelerating Database Joins Using a General Purpose GPU. For this project, I implemented an experimental database engine in CUDA that supports relational joins between tables.
I worked with Robin Lock, Patti Frazer Lock, Ed Harcourt, and Rich Sharp to develop a collection of web-based statistical simulation apps. The applicaiton, known as StatKey, accompany Statistics: Unlocking the Power of Data.
A selection of my teaching resources may be found here.
Curricula (including materials and selection of topics and activities) for the German Labs were developed by myself to coordinate with the schedule of topics in lectures. An example syllabus is available here.