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.

hdl.png

Simple Scene Detection (PDF)

A machine learning project.

pssr.png

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. mm_only.png

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.

obscura_off.png obscura_on_gray.png obscura_on_orange.png

Psych-Button (USB keyboard. source code here)

Programmable keyboard-like user response device with sub-millisecond accuracy.

four.png

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.

group.png

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.