I study security in low-level tools like compilers, programming language libraries, and hardware synthesis engines.
These form the most security-critical levels of our hardware and software supply chains. Using machine learning techniques such as data augmentation and graph neural networks, I look for malware, bugs, and opportunities to improve performance. Secure foundations enable developers to build with confidence and produce more trustworthy hardware and software.
Indiana University Intelligent Systems Engineering, Systems Engineer (2016-07-01 to present)
- Developed machine learning framework for C standard library analysis
- Managed RHEL/Ubuntu Virtual Machines (VMs) and Docker containers for autograder software-as-a-service (SaaS), serving up to 6 courses per semester and hundreds of students
- Built and maintained cluster, server, power, and switch infrastructure in IU DataCenter environment
- Built 64-node Xilinx FPGA cluster with 40G network interconnects for high performance graph analytics
- Managed 16-node Xeon/NetFPGA/Mellanox/GPU cluster for hardware accelerated networking applications
- Created curriculum and taught hundreds of students across 6 years, 4 required courses, and 1 elective
Indiana University Psychological and Brain Sciences, Electronics Engineer (2014-03-03 to 2016-06-30)
- Created novel sensor devices for research: galvanic skin response trackers, eye tracking systems, brain-computer interfaces, multi-modal pressure sensing surfaces
- Developed novel MRI-safe touch screen technology resulting in US Patent 10820839B2
- Developed MRI-safe input devices and associated computer interfaces
- Designed microcontroller-based data acquisition devices with nanosecond resolution and hard-real time constraints (firmware written in C++), interfacing with commodity operating systems (Apple OSX, Windows)
- Reconfigured storage area into electronics/woodworking/machining shop housing CNC mills, lathes, saws, PCB mill
Indiana University Intelligent Systems Engineering, Computer Engineering PhD (2018-08-20 to present). Machine learning for obfuscated binary code analysis.
Purdue University (IUPUI campus), BSEE (2010-05-11 to 2013-12-16). Electrical and Computer Engineering program.
Shroyer, Alexander and Martin Swany. “Data Augmentation for Code Analysis.” (PDF) The Second International Symposium on Advanced Intelligent Systems for Cybersecurity (AISC2022).
Brasilino, Lucas RB, Naveen Marri, Alexander Shroyer, Catherine Pilachowski, Ezra Kissel, and Martin Swany. “In-network processing for edge computing with InLocus.” International Journal of Cloud Computing 9, no. 1 (2020): 55-74.
Brasilino, Lucas RB, Alexander Shroyer, Naveen Marri, Saurabh Agrawal, Catherine Pilachowski, Ezra Kissel, and Martin Swany. “Data Distillation at the Network’s Edge: Exposing Programmable Logic with InLocus.” In 2018 IEEE International Conference on Edge Computing (EDGE), pp. 25-32. IEEE, 2018.
Arap, Omer, Lucas RB Brasilino, Ezra Kissel, Alexander Shroyer, and Martin Swany. “Offloading collective operations to programmable logic.” IEEE Micro 37, no. 5 (2017): 52-60.
Electronic tablet for use in MRI. WO US CA US10820839B2, Indiana University of Research and Technology Corporation (2020).
This patent describes a system for recording visually guided motor activity within a bore of an MRI machine. This device was used to measure handwriting’s impact on early brain development. Its functionality is described in more detail here.
Engineering Computing Architecture (E110, 2018-), primary instructor, required course
Engineering Ethics and Professionalism (E299, 2019-), primary instructor, required course
Python for Engineers (E399/599, 2020-), primary instructor, elective
Software Systems Engineering (E111, 2019-2021), co-instructor, required course
Innovation and Design (E101, 2016-2018), co-instructor, required course
Engineering Networks (E318/E518, 2016-2021), curriculum development
Engineering Operating Systems (E319/E519, 2016-2021), curriculum development
I’ve had the great opportunity to teach core courses at Indiana University’s Intelligent Systems Engineering program since 2016. My teaching style includes a lot of hands-on examples, live coding, and an environment where I hope students are comfortable to ask questions and try things themselves. Most of my classes mix lecture and lab style teaching. Because not everyone learns the same way, I employ lots of different learning methods - participation, projects, take-home style quizzes, and readings.
Engineering Computer Architectures
ENGR-E 110, Spring Session (16 weeks), Summer Session (first 6 weeks).
This course teaches the fundamentals of digital logic. Starting with boolean functions (And, Or, Not) and building up to a simulated CPU which can run programs, to shed light on the mystery of computation. This course takes a lot of inspiration from the wonderful Nand2Tetris curriculum by Nisan and Schocken at MIT.
Through this course, students are also introduced to HDL concepts, assembly language, and they have ample opportunities to hone their Python skills. Learning objectives include:
- understanding two’s complement arithmetic (addition, negation, subtraction)
- understanding how pointers work in a Von Neumann architecture
- crafting an assembler for a small assembly language using Python as the implementation language
- solve problems using string processing
- understanding the fundamentals of hardware description languages (HDLs)
Software Systems Engineering
ENGR-E 111, Summer Session (second 6 weeks).
This course teaches students C programming and the fundamentals of how to interact with memory through a CPU. Students learn C language syntax and concepts like functions, control flow, and data storage classes. Most work is exercise-based, where the goal is for the student to write programs which pass assorted tests (some visible, some hidden).
Learning objectives include:
- write functions in C
- write programs in C that process command-line arguments
- solve problems using arrays
- understand pointer semantics, including C pointer arithmetic
- understand size and speed trade-offs when manipulating data by pointer
- use C’s
structfeature to define custom data structures
- manipulate linked list data structures
Python for Engineers
ENGR-E 399/599, Winter Session (first 3 weeks).
Introduction to Python concepts (functions, control flow, data types, file I/O), and selected libraries (re, numpy).
Engineering Ethics and Professionalism
ENGR-E 299, Fall Session (first 8 weeks).
Ethical and professional considerations of the engineering field, with emphasis on software and systems.
These are courses I taught previously, but not within the last year.
Innovation and Design
ENGR-E 101, Fall Session (16 weeks).
Introduction to the breadth of engineering offered at IU’s Intelligent Systems Engineering program. Students design their own projects to solve a specific problem, with feedback and guidance from instructors. This course serves as an introduction to programming in Python, and also gives students experience in fabrication and creating models using CAD tools.
HDL Online (website)
A basic online editor for the hardware description language called simply HDL from Nand2Tetris. The URL updates with a permalink to the code as you edit, for ease of sharing.
Simple Scene Detection (PDF)
A machine learning project.
A Convolutional Neural Network (CNN) to classify two types of image (“simple” versus “regular” scenes). The images were taken by infants wearing head-mounted cameras, and researchers wanted to know if younger infants prefer “simple” scenes. My contribution was to provide an automatic image classification system so that researchers don’t have to spend so much time labeling images by hand.
GPU Support for J (PDF)
Adding a GPU interface to an interactive/interpreted programming language.
This was a project for a class called “High Performance Computing”. It uses J’s foreign function interface (FFI) to call ArrayFire functions. With compatible hardware, this speeds up certain operations. This work was a proof-of-concept intended to find a “cross over” point where the acceleration of the GPU offsets the latency of transferring data from CPU to GPU.
Obscura (Chrome Extension)
This extension is a simple filter that makes web pages darker. The reason I made this was in response to the complexity of existing solutions.
Psych-Button (USB keyboard. source code here)
Programmable keyboard-like user response device with sub-millisecond accuracy.
A graduate student needed something with 4 “normal” buttons and a “home” button with sub-millisecond timing resolution. The “home” button is my favorite part. It is a screw conductively coupled to a capacitive-sensing pin on a Teensy LC, with a library to make it behave like a pushbutton switch.
The Skinny (embedded system)
Measures and records skin conductance levels.
Myself and another engineer built 30 of these for an honors-level Psychology course at Indiana University. The device records skin conductance between 2 electrodes and logs the data to a micro SD card. Students devised their own experiments around the device, and presented their results at the end of the course. Experiment topics ranged from “watch a scary movie” to “listen to your favorite music”.
- hiking with my family
- playing guitar
- riding bikes
- and designing musical electronics equipment
This J sentence yields my email address:
I try to post about once a month, often about array languages or other nerdy things.