Systems engineer interested in building and operating reliable infrastructure. Currently employed at ngrok developing networking ingress as a service.
Completed a Ph.D in Computer Engineering at Missouri S&T in the SeNDeComp research group, advised by Dr. Sahra Sedigh Sarvestani.
Created curricula for a lab course in tools for programming and an introductory readings course in Haskell.
When designing or analyzing a complex system, several models of that system must be created and evaluated. Generating these models is a labor-intensive and error-prone process. Furthermore, as the system's architecture evolves through the design process, each model must be updated to reflect the latest changes. Metamodeling tools can simplify this process by automating some or all of the model creation and update process.
We view models as partial syntactic representations of a system, much as source code is a syntactic representation of a program. Through this lens, we can apply program analysis techniques to system analysis. Abstract Interpretation is one of these techniques. Originally developed as a static program analysis tool, Abstract Interpretation sidesteps the issue of the halting problem in program analysis by providing syntactic transformations between a program's source code and a properties domain that describes a property of the program we want to analyze. The transformation process is guaranteed to be correct, but it may sacrifice specificity in order to produce a result. For example, if we want to know whether a program outputs a negative or positive number, Abstract Interpretation may inform us that either outcome is possible.
To transform models with Abstract Interpretation, we first define a properties domain that captures the relevant aspects of cyber-physical systems we are concerned with. Then we define transformation operations for each modeling domain we desire to operate on, allowing us to abstract system properties from these models and to concretize models from a given collection of system properties. This process can be proven to be sound; furthermore, we can improve the specificity of our results through the properties of the structures used in this transformation process.
Electronics play a large role in modern life, including in safety-critical equipment such as cars and infrastructure. Thus, they must be designed to not malfunction or to fail safely. Two sources of malfunctions are electrostatic discharge (ESD) and electromagnetic interference (EMI), which can cause software glitches, system crashes, and even permanent hardware damage. As this interference results from a system being exposed to extreme electromagnetic fields, it causes hardware faults which manifest as software errors. Our goal is to study the software effects of EMI with the intent of detecting EMI events and potentially mitigating the software errors they cause.
To achieve this goal, we developed a software instrumentation approach which allows us to monitor the operation of system peripherals — here we focus on USB devices. Our instrumentation can monitor the operation of the USB bus controller by taking a series of snapshots of its control settings as traffic flows across the USB bus. We can use the data from this instrumentation to guide the development of software that ensures the system continues to operate in a valid and reliable state during and following ESD or EMI interference. Information collected by the software will furthermore be used for root-cause analysis of ESD- and EMI-induced failures. Our broader goal is to develop a science that will link the traditionally disparate fields of electromagnetic and software engineering, by leveraging the body of knowledge in each field.