Sheryl Hsu is a student at Stanford University passionate about computer science, mathematics, and entrepreneurship. Her past experiences include a software engineering internship at Two Sigma, inventing an app with over 6,000 users, and publishing multiple papers and talks as part of her research at Stanford and MIT PRIMES.
I created elicker which is an iOS app that helps musicians organize licks and exercises efficiently. The app allows you to snap pictures of music, create recordings, take notes, and keep tracks of key. There is also a powerful search key which allows you to search using tags, favorites, and keys so you can find the perfect exercise or lick. The app also includes an image focus mode where you can tap on an image and it displays it in fullscreen so you can easily read music.
I came up with the idea for elicker after struggling to keep track of many sheets of licks while studying jazz trombone in fall 2022. I programmed this app using SwiftUI. It currently has just under 200 downloads on the app store. In addition to developing the app, I also have gotten a taste of the world of marketing by creating its App Store page, Instagram page, and fliers.
On a dusty wooden patio stands a line of families waiting for their turn with a strange looking wooden contraption. One by one, kids place lego chains on a laser-etched board, trying to build a railroad between color changing LEDs on the board. Once the last rail is in place, a computer vision algorithm analyzes the network, displays the results, and offers to teach users how to use a graph theory algorithm to build the shortest railroad.
I built this project, Roads to Quicksilver, in collabaration with the MathHappens Foundation. It was visited by hundreds at the Almaden Quicksilver Mining Museum’s Play Like a Miner event. Roads to Quicksilver aims to teach visitors about graph theory, Kruskal’s algorithm, and the history of the Almaden Quicksilver mines by challenging them to build, using lego chains, the shortest railroad possible between different historical landmarks in the mine. This is in reality a formulation of the classical Minimum Spanning Tree problem, which asks for the shortest tree spanning a set of nodes. This problem has many everyday applications such as transportation and communication networks. The Minimum Spanning Tree is solved by the famous Kruskal’s algorithm, which says to iteratively build the shortest edge that connects two nodes that are not already connected until all nodes are connected. With Roads to Quicksilver, LEDs embedded into the board change color so that connected locations are all the same color. Visitors are then instructed to build the shortest railroad connecting two LEDs of different colors until all points are connected.
The construction of Roads to Quicksilver was no small feat. Mechanically, the project consists of laser cut plywood screwed together with brackets and 1x1 wood pieces. Custom 3D printed pegs were used to hold the LEDs to the plywood. The laser etching of the board took over 8 hours, resulted in two broken laser cutters, and required a visit from the fire department. I created many models of the overall proejct as well as individual parts in Autodesk Fusion. I learned a lot of woodworking skills such as using a table saw and staining wood.
Electrically, there is a maze of wires under the board connecting the RGB LEDs to an Arduino MEGA. This Arduino MEGA is connected via USB to the Raspberry Pi mounted behind the screen.
The Raspberry Pi runs a GUI I built using react.js. The GUI displays instructions and feedback to the user. For example, it can display the graph that a user built on the board.
It also consists of a computer vision algorithm that utilizes the python openCV library. When the user hits a button, a attached Raspberry Pi camera takes a photo. The algorithm first isolates the chains the user built by finding differences against a previous photo with no chains on the board. The algorithm then computes the percentage of chain in convex hulls of possible edges and finds edges with percentages that exceed a given threshold.
I hope that Roads to Quicksilver will serve as an example of how engineering and technology can be used to present concepts in exciting and accessible ways while combining a variety of subject areas from history to graph theory.
As part of Stanford’s Empirical Security Research Group, I have been working on a project analyzing the Chrome Web store. My mentor for this project is Prof. Aurore Fass.
I first built my own Chrome extension using html and javascript to monitor other extensions a given user had installed. My extension could intercept messages, DOM changes, and fetch requests and then pass this information to a Django backend.
In addition, I built a multithreaded crawler in Python to scrape metadata from the Chrome Web store as well as download source code every time an extension was updated. The metadata was then stored in a SQL server.
The majority of this project has consisted of data analysis. Using matplotlib, I have made many graphs detailing different variables such as that displayed below.
This plot shows the percent of extensions that have been updated at least once by their xth month in the Chrome Web Store.
This research project is still a work in the progress and will hopefully result in a conference publication in the near future.
Date:
April - October 2022
Skills:
SQL, Python, Data Analysis, Research, Technical Writing
Explore-and-Fuse: A Physarum-Inspired Approach to the Steiner Tree Problem
In this project, I developed a novel biologically-inspired explore-and-fuse approach to solving difficult, NP-hard problems. This project resulted in two published papers and won numerous awards (more information at bottom).
This approach was inspired by Physarum Polycephalum which is a unicellular green slime mold with the intriguing ability to solve mazes, form networks, and share information with other Physarum organisms through fusion.
In the beginning of the project, I spent a lot of time reading research papers and learning about both the biological aspects of Physarum Polycephalum as well as the different mathematical models of Physarum. From my research, I came up with the idea of exploring interactions between multiple Physarum using cellular model.
Following this idea, I developed the Model of Multiple Cells.
The Model of Multiple Cells consists of diamond-shaped Physarum organisms reshaping themselves and moving around until they come into contact and fuse.
Using this model, I developed the explore-and-fuse approach where many individual Physarum organisms are initially spawned. The organisms independently gather information and form partial solutions as they fuse. Eventually, they fuse into one large organism that can optimally solve the global problem taking into account information gathered by the individual organisms. This approach presents a balance between speed and optimality.
I then demonstrated the explore-and-fuse approach on the Euclidean Steiner Tree problem, creating the Physarum Steiner Algorithm. The Euclidean Steiner Tree problem basically asks for the shortest length tree connecting a set of points.
Finally, to demonstrate the capabilities of the Physarum Steiner Algorithm, I applied it to a variety of problems.
Physarum Steiner Algorithm creating road network among large cities in the United States
Physarum Steiner Algorithm routing fiber optic cable to connect households while avoiding obstacles such as a lake and park.
VLSI (very large scale integration) chips design is one of the largest real-world applications for the Steiner Tree. Here, the Physarum Steiner Algorithm routes connections between 131 pads on an electronic board.
The Physarum Steiner Algorithm is able to find Steiner trees on other topological surfaces such as the torus and sphere.
There were additional experiments done to validate the Model of Multiple Cells and test parameters of the Physarum Steiner Algorithm such as cell size, number of cells, time complexity, and cell shape. These experiments were often large scale with over 1,000 trials, so I chose to run them on Amazon Web Service’s Batch platform. I created container images uses Docker and learned to configure AWS security groups and platforms.
The actual Physarum Steiner Algorithm was written in Java and is available on GitHub. The data analysis was primarily done in Python using matplotlib. I wrote a script to download csv files from AWS and an additional java program to compile data from individual trials. Python was used to do additional computations and create graphs such as the one shown below.
This project has resulted in 2 papers, “Cell fusion through slime mould network dynamics”(available here) published in Journal of the Royal Society Interface detailing the Model of Multiple CELLs and “A Physarum-inspired approach to the Euclidean Steiner tree problem” (available here) published in Scientific Reports detailing the Physarum Steiner Algorithm. This project has been presented at the MIT PRIMES Conference, the UMS Poster Session, and has been accepted to the Joint Mathematics Meeting 2022.
As a result of this project, I was named a Regeneron Science Talent Search Scholar, or a top 300 future scientist or engineer. This project was also selected as a Grand Prize Winner at the Silicon Valley Synopsys Science and Engineering Fair. I was also named an ISEF Finliast and won an ISEF Special Award from the CIA. A poster is available for download here. My advisor for this project was Prof. Laura Schaposnik, with contributions from Fidel Schaposnik.
Date:
January - October 2021
Skills:
Algorithms, Java, Python, Data Analysis
Payload Test Arduino Shield PCB
For the past three years, as part of the ISS Research program, I worked a lot with these payload boards (pictured below). Normally, this board plugs into another custom PCB connected to a basic stamp, a microcontroller, but it was very hard to debug using this system. As a result, a lot of us resorted to counting header pins and connecting the payload board to Arduino pins, and miscounting has resulted in quite a few shorted boards.
As a result, I decided to create an Arduino shield that this payload board could easily plug into. This way, teams could easily test their electronics circuits. The shield is compatible with both the Arduino UNO and MEGA and was designed so that the payload board stands up vertically, providing easy access to the circuit so teams could probe with multimeters. The board maps every single pin on the payload board, from analog to digital output to data lines, to one on the Arduino. The board also includes indicator LEDs on all lines and test points.
The schematic and board design were done in Eagle.
The board is a 2 layer board. Not all Arduino pins were needed, so the board was made shorter to save space and manufacturing costs. This also required creating a custom part and footprint to get rid of the additional pins.
The board was ordered after design reviews by mentors. I assembled the board including surface mounted LEDs and diodes. It is pictured below.
Date:
January 2022
Skills:
PCB design, schematic design
Underwater Robotics
Over my four years in high school, I was heavily in my school’s underwater robotics team where we built robots to compete in the MATE competition. Our ROVs had to do tasks such as taking photos of maps on the bottom of the pool, lift various objects, and measure the length of rubber fish. In addition, we had to write and submit over 20 pages of technical documentation detailing our design, safety procedures, and corporate reponsibility programs. I served as the CEO of the team for two years and led the team to two top five finishes at the world championships for the first time in school history.
Ethernet camera streaming and communication system
One piece of software I developed was an Ethernet camera streaming and communication system. Reflecting on the 2020-2021 MATE ROV (underwater robotics) season, we agreed that one area that needed a major upgrade was our camera and communication system. Our communication system was based on a board that was no longer being sold and easily broke while our camera system utilized analog cameras resulting in very low resolution images that were impossible to use for computer vision algorithms.
We decided to use an Ethernet communication system. From the beginning of the year, I worked on many different prototypes using a single Raspberry Pi to splice together multiple video streams, using Jetson Nanos, and finally using multiple Raspberry Pi’s connected with an Ethernet switch. In the end, we chose to use a system in which a camera unit consisted of a Raspberry Pi Camera and a Pi Zero. The Raspberry Pi’s were connected to the topside via a Ethernet switch. I also chose to use an Arduino Ethernet shield so the Arduino could directly communicate with the topside.
Testing latency with 3 camera streams and Arduino communication.
With three cameras, the system can handle 30 fps at 1920x1080 with approximately 0.2 seconds of latency, which is a major improvement from previous years and allows to tackle image recognition tasks.
Coral identification program
One year, we were challenged to build a computer vision program that could take a photo of “coral” made out of white and pink pcv pipe and compare it to a previous image and highlight areas that had either died, been bleached, recovered from bleaching, or grown. To tackle this challenge, I built a python program using openCV. I first applied a mask to isolate only the pink and white PCB pipe and thus disregard the background. I first implemented image alignment which idnetified matching features on both images and then applied a homography. After the two images were aligned, I took the difference between them and drew bounding boxes around areas of high difference. Based on whether the area had changed from pink to white, white to pink, or other cases, I drew differently colored bounding boxes.
Left: applying mask, Middle: aligning images, Right: Final output
Onboard electronics system
My team chose to build a custom PCB that fit inside our watertight electronic enclosure onboard the ROV. I designed and conducted design reviews on the board as well as assembling it. Through this expereince, I learned to test things individually and logically eliminate sources of error when systems broke. Beyond electrical work, I potted penetrators and found and fixed leaks.