News
- 2023-01-09
- IntelliSys2023 paper accepted
- 2022-09-06
- AISC2022 presentation, paper, proceedings
- 2022-08-23
- Research committee form approved (this means I can defend as early as 2023-02-23)
- 2022-08-08
- AISC2022 paper accepted
- 2022-07-19
- Coursework complete, I am officially a Ph.D. candidate
- 2021-08-06
- Qualifying exam passed
Research
My current work uses machine learning and graph analytics to locate known functions within obfuscated binary programs.
Low-level tools like compilers, programming language libraries, and hardware synthesis engines form the foundations of modern hardware and software supply chains, so their security and efficiency is especially important. High-quality foundations enable developers to build with confidence and produce more trustworthy hardware and software.
By advancing the state of the art in this niche, I hope to improve the performance and security of this critical infrastructure.
Curriculum vitae
Professional Experience
Indiana University Intelligent Systems Engineering, Systems Engineer (2016-07-01 to present)
- Developed machine learning framework for C standard library analysis
- Managed RHEL and Ubuntu Virtual Machines (VMs) and Docker containers for autograder software-as-a-service (SaaS), serving hundreds of concurrent students across multiple courses in 2 departments
- Built and maintained cluster, server, power, and switch infrastructure in a data center
- Built 64-node Xilinx FPGA cluster with 40G network interconnects for high performance graph analytics
- Merged 8-GPU cluster with 16-node CPU/FPGA cluster for hardware accelerated networking applications
- Created curriculum and taught hundreds of students per year across 5 required courses and 1 elective
Indiana University Psychological and Brain Sciences, Electronics Engineer (2014-03-03 to 2016-06-30)
- Developed novel MRI-safe touch screen technology resulting in US Patent 10820839B2
- Created novel sensor devices for research: galvanic skin response tracking, eye tracking systems, brain-computer interfaces, haptic pressure sensing surfaces
- Developed MRI-safe input devices and data acquisition 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 extra space into combined electronics, woodworking, and machining shop with CNC mills, lathes, saws, PCB fabrication
Education
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.
Publications
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.
Patents
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 using a touch-screen device within the bore of an fMRI machine while it conducts a brain scan. The device measures handwriting’s impact on early brain development, described in detail here.
Teaching Experience at Indiana University
Engineering Computing Architecture E110 (2018 to present) primary instructor
Engineering Networks E318/E518 (2016 to present) co-instructor
Engineering Operating Systems E319/E519 (2016 to 2021) curriculum development
Engineering Ethics and Professionalism E299 (2019 to present) primary instructor
Software Systems Engineering E111 (2019 to 2021) co-instructor
Innovation and Design E101 (2016 to 2018) co-instructor
Python for Engineers E399/599 (2020 to present) primary instructor (elective)
Teaching
I have been teaching 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 are a mixture of lecture and lab. 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 (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 is inspired by the wonderful Nand2Tetris curriculum by Nisan and Schocken at MIT.
Through this course, students are also introduced to hardware description language (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 HDLs
Software Systems Engineering
ENGR-E 111, Summer Session (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
struct
feature to define custom data structures - manipulate linked list data structures
Python for Engineers
ENGR-E 399/599, Winter Session (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 (8 weeks).
Ethical and professional considerations of the engineering field, with emphasis on software and systems.
Past Courses
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.
Projects
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”.
About Me
I enjoy:
- hiking with my family
- playing guitar
- riding bikes
- travel
- puzzles in both physical and code form
- designing musical electronics equipment
Contact: first initial + last name at gmail.
Writing
I try to post about once a month, often about array languages or other nerdy things.
Low Impedance Pickup2023-01-01
First Emacs Syntax Highlighter2022-11-12
Fantasy Fantasy Football2022-04-30
Machine Learning Idioms2022-03-28
Interfacing J With C2022-01-10
Armchair Language Design2021-11-07
Google Cloud Functions2021-11-01
Favorite Language Features2021-10-13
Org Mode Static Site2021-10-12
Artificial Neural Networks2021-10-11
Static Site Generator2016-12-08
Refactoring Hardware vs Software2016-07-16
Text Editor Shenanigans2016-04-12
Evil Mode First Impressions2015-10-24
Synchronized Devices2015-09-07