Home
About Me
I am a special faculty researcher in the Neuro-Mechatronics Lab at Carnegie Mellon University. I transitioned into that role after my postdoctoral position in the same lab, where my work centered on neurotechnology, mechatronics, and software for studying sensorimotor control.
Recently, I have been building browser-based behavioral tasks, input-device utilities, and biophysical simulations that connect neural dynamics with embodied interaction. That includes Fitts and Click-Hold-Release task batteries, TabletHID-style interfaces, EMG and wearable-control workflows, and models that link muscle mechanics, motor neuron pools, and proprioceptive feedback.
About My Research
For my doctorate, I studied motor recovery from stroke in a
At the Neuro-Mechatronics Lab at Carnegie Mellon, I help build tools for experiments, models, and accessible interfaces, including research software, behavioral models, and task platforms for human-computer interaction and rehabilitation research.
News
May 18, 2026: Featured on Meta AI Wearables Blog
Featured on Meta’s AI Wearables Blog
Very excited to share that our Carnegie Mellon University collaboration was featured in Meta’s blog post, Our AI Wearables Are “Changing the Game” for Disabled People.
The post includes a section on using EMG from the Meta Neural Band to support new digital control options for people with spinal cord injury. In the featured video, Cass uses two neural bands to compete in a multiplayer racing game, steering and boosting through hand gestures captured from forearm muscle activity.
May 14, 2026: Neural Network Architecture Renderer
Neural Network Architecture Renderer
I put together render.nml.wtf as a small browser-based tool for sketching neural network schematics and exporting figure-ready panels.
The goal is to make it easier to produce clear architecture diagrams for AI/ML research without rebuilding the same visual grammar in a slide deck, vector editor, or one-off plotting script every time. The app is meant for laying out layers, connections, and figure panels in a way that can be quickly revised as the model changes.
Figure panels for model diagrams
I am especially interested in tools that sit between rough whiteboard sketches and polished publication figures. A renderer like this can help keep network diagrams consistent across papers, posters, talks, documentation, and lab notes, while still being lightweight enough to use during active model development.
The longer-term idea is to make it simple to export schematics of neural network architectures in reusable formats, including publication-oriented graphics and code-adjacent representations such as TikZ.
May 01, 2026: TabletHID
TabletHID
I put together TabletHID as a web app for turning a tablet-style surface into an input device for experiments and demos. The goal is to make it easier to prototype touch-driven control schemes without having to rebuild the rest of the stack every time the interface changes.
Touchscreen input for experiments
This is part of the same general effort as the CHR Tasks work: make the interaction layer easier to swap, test, and connect to the rest of the tools we use in the lab. TabletHID gives me another way to bridge browser-based interfaces with the kinds of controller and HID-style inputs that are useful for neuroscience, rehabilitation, and human-computer interaction experiments.
January 15, 2026: CHR Tasks
Click-Hold-Release Tasks
I spent part of January revamping the Click-Hold-Release (CHR) task site for browser-based experiments where the timing of a click matters as much as the fact that a click happened.
The core CHR task is built around the difference between a press, a held state, and a release. That distinction is easy to lose when an interface treats a gesture as an instantaneous command. A swipe, pinch, or classifier-detected gesture can be interpreted as a single “click now” event, but a pushbutton-like control has state: the button goes down, remains down while the user holds it, and then comes back up. For many human-interface-device style workflows, that state is the point. HID usage descriptors provide a useful vocabulary here: button and control usages can describe selectors, on/off controls, momentary controls, one-shot controls, and other report fields. CHR tasks make that distinction explicit by asking whether a user or device can reliably produce and maintain the intended input state, not just trigger an event.
Tasks and utilities
The site also includes a gesture calibration utility and a broader set of standalone tasks: simple Click, Fitts 2D, Choice-Click, Fatigue, PacMan, 2-Choice CHR, Fitts-Exo, CHR Survivor 1D, CHR Survivor 2D, Guitar-Hero, and Typing. The goal is to cover a few different interaction styles, from target acquisition and choice selection to sustained activation, sequential timing, and text-entry-like control.
I also added a Studies route for chaining parameterized task runs with fixed metadata. That should make the site more useful for device-use studies outside a tightly supervised lab setting, for example when collecting repeated runs from a home context while keeping task parameters and study labels consistent.
September 15, 2025: Biophysical Simulations
Biophysical Simulations
In September I was working in earnest on biophysical simulation tools for thinking about how muscle mechanics and neural dynamics can be modeled together instead of treated as separate layers.
The main idea was to build from the muscle fibers outward. I was especially interested in viscoelastic muscle-fiber models, where force production depends on activation but also on length, velocity, history, and passive elastic properties. That gives the simulated muscle a mechanical memory and lets the model represent behavior that is hard to capture with a simple instantaneous force command.
Linking mechanics to neural dynamics
The next step was connecting those muscle models to NEURON-like dynamics for motor neuron pools and sensory feedback pathways. In that framing, motor units are not just output channels: they sit inside a loop with muscle spindles, Golgi tendon organs, interneurons, and descending drive. The hope is to make network simulations where reflex arcs, recruitment, activation dynamics, and musculoskeletal mechanics all share the same biophysical bookkeeping.
Long term, I would like these simulations to support more principled biomechanical network models. That means being able to ask how changes in muscle properties, motor neuron excitability, proprioceptive feedback, or task constraints shape the behavior of the whole neuromechanical system.
July 06, 2024: Accidental Malware
Accidental Malware
After more-or-less finalizing several Fitts’ Tasks for measuring motor information throughput, I figured I should make it possible to interface to the tasks using more than just a mouse, trackpad, or touchscreen. My idea was to write a compiled c/c++ executable, which I could easily run from any Windows-11 device (i.e. most of my normal lab workstations), that would run in the background as a “controller emulator server.” I got to work writing an Input_Utilities code repository. You may have guessed where this is headed.
It works
I started out with a server utility that opens port 6053 and accepts websocket TCP/IP connections from any IP address that the program has access to. Once a socket connection is made, it indicates in the console that "XBOX controller connected." After that, it pretends to create Windows Gamepad events based on TCP char packets consisting of 'a1' (for “A-button” release) or '40' (for d-pad left press; full table here). So it lets you issue commands as if you were connected via an XBOX controller, simply by connecting to the socket and issuing the correct 2-char newline-terminated sequence. I thought this was pretty nifty since it allows me to, for example, do some decoding in MATLAB or Python, then from within that environment create a TCP/IP socket connection to the emulator and proceed to convert any decoder output into the appropriate character sequence. In turn, this allows me to interact with ALL the numerous types of applications that accept XBOX Gamepad inputs! Not bad. To keep it relatively “safe” I made sure the program exits once the socket has been closed. Of course, this gets annoying if you have to restart the server every time, so the next steps were:
- Add other forms of input emulation, and
- Add “server persistence” because I’m lazy.
Mouse Input Emulation
In the second version, I added mouse input emulation. This basically uses the same approach as before, but opens an additional socket connection on port 6054. Both of the sockets need to be connected for the main loop to run on the server application. The mouse inputs can emulate mouse movement events, left/right clicks, press and release, and mouse wheel scroll-up and scroll-down. The full API description for the mouse events is in the table here.
Adding Persistence
The final version, it basically just wraps the application in a while loop that allows it to cycle back into waiting for both of the client socket connections to complete so that the server application no longer closes when the socket connections are closed. I realized that, basically what I had made was an application that runs in the background and allows some other machine to take over the server application’s mouse, which sounds a little bit like malware but it’s for a good purpose. So I added some caveats about security and how it should be deployed along with some default .bat scripts to modify firewall rules for the ports used by the application in an attempt to make sure if anybody other than me uses this, hopefully “you’ve been warned.” Please read the safety concerns here, if you’re considering using it.
June 30, 2024: Fitts Law Tasks
Fitts Law
Fitts’ Law is a way of measuring motor throughput in point-to-point movements. The framework has been extended to evaluating human-computer interactions, but may need refinement depending on the nature of the task and what type of information we care about specifically.
Fitts Law Tasks
Recently, there has been a fair amount of hype about the throughput achieved by the first publicly visible participant in the Neuralink BCI trials. After going to their website and playing the task variant they’re using to quantify information throughput, my immediate reaction was that this is not a throughput task that derives the metric for information transfer from Fitts’ Law. Based on the size of the grid, distance traveled, and the total time it took me to click through (you get to play for 60 seconds total, as many correct clicks as you can), there’s no way based on how high my score was that this is how they’re doing it.
So, I decided to take a stab at making some Fitts’ Tasks for measuring motor information throughput. My idea was to make some tweaks and adjustments to our existing Fitts’ Law variants to see if we could make them “fuzzy” and allow participants to score even when they are having a very hard time clicking the target correctly at all. I did the same thing for my best-guess as to how the Neuralink task works, and I’m pretty happy with how it turned out!
February 29, 2024: NML Behavioral Tasks
Behavioral Task Docs
I have been working to upgrade the documentation and make more modular the codebase running behavioral tasks. Specifically, I wanted to make a networked protocol compiled in c/c++ that allowed for very-high fidelity in logging from devices across several different operating systems/distributions. I’ve included the relevant doxygen documentation on the NML-WTF website.
March 21, 2021: Neuro-Activities
Neuro-Activities
One of the graduate students at our lab (Monica) made this really cool website with interactive neuroscience activities for teaching key concepts related to some of the more abstract parts of research going on in motor systems neuroscience.
Center-Out Task
I made a fork of her repository and added some minor adjustments to simulate some parts of the NHP task I’ll be using for my research. This state-coding demo is still a work-in-progress, but the objective is to illustrate how we can play on the expected movements of the virtual cursor to test hypotheses about how individuals control movement. Currently, there is a jitter component that will eventually include a slider to scale the magnitude of the cursor jitter in order to inhibit feedforward prediction of where the cursor will be as the mouse moves. After a limited number of trials, the cursor movements are perturbed using a fixed angular offset, which the brain realizes relatively quickly and corrects on ensuing trials. Eventually, I would also like to add functionality that gradually weans reliance on visual position of the cursor in order to collect pilot data on how well uninstructed individuals are able to correct for the perturbation in the absence of visual feedback (I suspect that it will be quite difficult, but may be facilitated by allowing a very brief indication of how the perturbation is influencing motion).
January 15, 2021: Active Inference Model-Stream
Active Inference Model-Stream
I’ll be participating in the Active Inference ModelStream #001.0: “A Step-by-Step Tutorial on Active Inference” today at 11am CST. Please join me here if you would like to watch live!
About ModelStream
The ModelStream channel will aim to provide tutorials for the use of Active Inference or comparable models in describing different kinds of data. The videos for a given topic will most likely be multi-part. For today’s video, we will be covering Sections 2, 3, and 5 of this tutorial paper describing how Active Inference could be used to describe Partially Observable Markov Decision Processes (POMDP), such as may occur when an individual agent is choosing to make a binary decision while using or excluding information that is associated with risk mitigation. Importantly, the authors have provided corresponding Matlab code that directly implements the model simulations described with great detail in the tutorial paper.
As someone who does not study the neuroscience of decision-making (as a neuroscientist, I consider myself to study motor systems), I can say that this is still an excellent way to learn about how you might incorporate a process model to provide possible explanations regarding why certain data were observed. This is not a mutually exclusive process to more traditional statistical methods that use variance models to study how certain data might have arisen given the experiment and resulting observations. The two are related and both important to understand as neuroscientists seeking to assess and explain biological phenomena in a parsimonious sense.
November 22, 2020: Thoughts on TCOE
Thoughts on TCOE
I am an avid fan of Dungeons & Dragons (5e), which means I run games for some of my friends (more frequently the case in the past). Recently, Wizards of the Coast released a new supplement (Tasha’s Cauldron of Everything; TCOE), which introduces new optional class features. I had an immediate dislike to one of the new Fighter class features, so I decided to do some simulations.
Argument
I initially thought that Superior Technique was over-powered as a Fighting Style and added too much damage in addition to the utility it affords due to access to Battle Maneuvers previously reserved for access through feats (which are costly to spend on this) or by sub-classing Fighter to the Battle Master class (which was usually how Maneuvers would be obtained). However, simulations show that Great Weapon Fighter fighting style still has an increased damage expectation compared to baseline damage expected to be added from Superior Technique. Further analysis is required to include the utility effects that are peculiar to each Maneuver that could be selected when choosing this Fighting Style.
November 19, 2020: Thoughts on Peer Review
First Post: On Academic Service
Check out my thoughts on modern peer review. I see peer review as the main way in which I can currently provide a service to my academic peers. However, I have a real bone to pick with the details of how peer review is conducted in practice.
Argument
The act of publishing articles in journals other than Nature or comparable is unethical. Publication in other journals (with few exceptions) dilutes knowledge and fundamentally threatens the true institution of peer review. Unfortunately, the current traditional peer review model perpetuated by predatory publishers such as IOP, Elsevier, Taylor and Francis, and Springer only serves to encourage the aforementioned knowledge dilution. Worse, these syndicates waste the time of well-meaning scientists by advocating erroneous arguments for how the traditional peer review model serves science while in reality it is simply a source of free, expert labor. In this post, I argue that modern peer review supplants this traditional model, because technologically the services of the journals is no longer required. I concede that a few journals remain viable and provide useful services, but ultimately we will need a better way to recognize academic service with respect to knowledge curation and dissemination because the traditional “currency” of the academic system–publications–is no longer a tenable solution for the next generation of up-and-coming scientists.
November 10, 2020: Carnegie Mellon talk
Virtual presentation: Carnegie Mellon University
I presented a modified version of my thesis to the Weber lab and affiliate faculty, going into a little more technical detail about the results from Aim 1 of my dissertation.
Aftermath
It was so nice to meet everyone there and hear about their work. I was so impressed with all the interesting projects that are ongoing and look forward to hearing more in the future.
October 09, 2020: Successful Dissertation Defense
Successful Defense!
I successfully defended my doctoral thesis (Neurophysiological mechanisms of sensorimotor recovery from stroke), with honors!
Aftermath
I celebrated with friends by playing Dungeons and Dragons, in which a long-running (2-year) campaign arc reached its satisfying conclusion.
