News

2022-08-08
My paper was accepted to AISC2022
2022-07-19
I am officially a Ph.D. candidate

Research

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.

Curriculum vitae

Professional Experience

Indiana University Intelligent Systems Engineering, Systems Engineer and Adjunct Instructor (2016-)

  • 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 hardare 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-2016)

  • 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 touchscreen 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

Education

Indiana University Intelligent Systems Engineering, Computer Engineering PhD (2018-). Machine learning for obfuscated binary code analysis.

Purdue University (IUPUI campus), BSEE (2010-2013). Electrical and Computer Engineering program.

Publications

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

Teaching Experience

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

Teaching

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, the mystery of computation is revealed. 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 funamentals 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 struct feature 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.

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
  • puzzles
  • and designing musical electronics equipment

Contact:

This J sentence yields my email address: '@gmail.com',~(8,12+i.7){'https://alexshroyer.com'