I'm a software developer, maker, and Linux nerd. I aim to contribute to software and electronics engineering projects that move society toward more open standards, improve quality of life for people in need, and provide useful tools and building blocks for other makers. I support free (libre) and open source software, open hardware, digital rights, an open internet, and consumers' right to repair.
Click images to view project info. Circular icons link to the code, demo site, video, etc.
ArduinOLED is an Arduino-based platform to create games, test equipment, and other projects. It includes an OLED display, joystick, buttons, buzzer, and alligator clip connection points to easily interface with other sensors and devices. Using the ArduinOLED, I made a stacker game, and a battery health tester (with a small external circuit). Much more is possible with the instructions I posted on Instructables and the open source library I wrote and published on GitHub/GitLab. I designed and ordered the printed circuit boards on EasyEDA.
NASA Goddard Space Flight Center (GSFC) Internship
I fixed bugs in C code for NASA’s core Flight System by writing unit tests on a CentOS Linux virtual machine (using VirtualBox). To help write unit tests, I wrote some bash scripts to generate skeleton functions, then filled them in manually with code to test each case. At the end of the summer, I created a poster and presented it at a lab-wide showcase day.
FIRST Tech Challenge (FTC) Robotics
I competed in FTC robotics in highschool for about 200 hours per schoolyear. 2016 was our most successful year; we won the East Super-Regional competition, and were awarded a finalist nomination at the World Festival for control system and sensors (season review video). As the co-programmer, I helped write an Android app to control the robot's motors and sensors through an Android phone. We separated our code into libraries for other teams to use, including a Java library to manage the underlying state machine, and an Android library with a lot of our generic code. The competition involved both a tele-operator period, with a human driver; and an autonomous period, during which we used sensors with filtering algorithms to determine our position and complete tasks. We made an OpenCV computer vision tutorial and taught a class to 35 people at a state-wide season kickoff event. For one of our motor controller boards, we designed custom PCB's to make the wiring easier. Then we printed out a few hundred and handed them out to other teams. The company that makes the motor control boards contacted us and bought some of our boards to sell online for a time. I also worked on the team website to thank our sponsors and to store info about the team.
Applied Physics Lab (APL) Internship
Jun 2015 – Aug 2016, summer 2018, Jan 2019
I interned for APL multiple times, first in highschool, where I explored proposal options for a miniature satellite (cubesat), helped develop curriculum for a professor's intro to cubesats class, worked on a prototype for combining computer vision and voice recognition, and learned OpenCV vision processing for an Android phone camera. Then I interned again in college, where I developed position history sharing between multiple LiDAR mapping backpacks (the featured image, from this article), then integrated a new model of camera to the mapper backpacks and started developing OpenCV algorithms for the new camera, creating documentation for the process along the way.
Boggle Online Game
Boggle is a word game that my family likes to play. One day, we were wondering how many words we missed on a particular board, so I coded up a python program to find all the possible words on any given boggle board. Then we would play normally, and enter the board into the script to see what long words we had missed. The next iteration of this program was an online version, where you can play a game with multiple people, automatically validate and add up points, and view the list of all the words you inevitably missed, because computers can do in an instant what it takes humans much longer, and the singularity is aproaching. ;)
Obnoxious Scheme to Convince All to Recycle (OSCAR)
OSCAR is a talking trash can that insults you if you put recycling in the trash bin, trash in the compost bin, or really anything in any bin because the actual code to make the determination of what type of waste you are holding was not working (thanks a lot, IBM with your so-called "watson waste sorter"...). It was developed at Bitcamp (a hackathon at University of Maryland) by me and 3 of my friends. We wrote up a description and project page with pictures and video at 4am. I was in charge of infrastructure and odd jobs -- I set up the Raspberry Pi and showed people how to use ssh, gave people accounts on my home server for easy file sharing, drew portraits of the team members and the logo to enter in the colorwar contest, and helped out here and there with the python code.
I co-wrote this Java library to manage states and transitions during my time in FTC robotics. Although we used it to help control the robot, it does not have any robot-specific code in it, so it can be used in any project involving a state machine. We wrote documentation for other teams to use detailing how to import it into a project and create a simple state machine.
I recently moved my website to this new domain name that is easier to spell (since it doesn't include my last name :). Since I was moving it, I also decided to try out some new ways of hosting it. I settled on dokku, which is a docker-based platform-as-a-service infrastructure that allows you to deply code by doing a git push to the site. It's hosted on a Linux virtual machine on DigitalOcean for only $5 a month. Dokku allows you to easily deploy different apps to different subdomains, and so far I have the main site, a blog, some games, and a LimeSurvey site.
Chatbot with Automatic and Rapid Learning (CARL)
Jul 2015, Jan 2018
CARL was born in July 2015 on Scratch, a programming learning website I was using at the time. CARL learns from the phrases you type in, looking for close matches and links between phrases. I also wrote a Spanish version called CARLA (Chatbot con Aprendizaje Rápido, Lógico, y Automático), which didn't receive as much training data because fewer people following my scratch profile spoke Spanish :(. He was later upgraded in January 2018 at Hoya Hacks, a hackathon at Georgetown University, to a python web application. Please talk to him so he can learn more phrases!
This is a Java application that I wrote for AP Computer Science that balances chemical equations. You can try it out here. It converts the input string into a symbolic chemical format, then into a system of fractional mathematical equations, which it solves (I rewrote a linear equation solver to use fractions) and displays the balanced equation. It can also set the number of moles or grams of any compound, updating the quantities of the other compounds. It includes a Java enum with all the elements and atomic mass, which I generated with a python program that scraped the properties from a set of text files I downloaded. And yes, it does take into account the atomic mass of an electron into the calculations.
Artificially Intelligent Medical Assistant Robot (AIMAR)
At University of Maryland, I am part of a Gemstone Honors research team called AIMAR. We are working on an assistant robot that records patient data and integrates with medical records to provide better information to doctors for a well-informed diagnosis. We are focusing on electroencephalogram (EEG) data to monitor epilepsy, and skin image data to distinguish skin cancer from benign regions. I have done various tasks for the team, such as setting up a lab computer with Ubuntu and remote desktop access so we can run machine learning jobs on powerful hardware, working with the Turtlebot platform with Robot Operating System (ROS) and Raspberry Pi boards, creating the team website, reading academic articles and referencing them in our own proposals, and learning how to use IBM Watson's natural language processing.
My friend and I set up a server in my house running Nextcloud, an open source file storage and collaboration platform. We learned how to register a domain name (confuzer.cloud), update DNS entries, open ports on a router, and manage a Nextcloud installation. We also chose to use ZFS (software RAID) for redundancy against physical failure of the hard drives. We also run local Linux package mirrors for Ubuntu and Raspberry Pi to make updates faster, and a wiki with some how-to articles for the Nextcloud server.
This is a set of installation scripts I made for creating a cluster of servers that boot from the ZFS file system. It sets up ZFS, installs Ubuntu on top, enables XRDP remote desktop and SSH, and installs kubernetes (for managing clusters of servers). Since it is multiple scripts, each of these functionalities can be installed separately if only some are needed.
Eagle Scout Project
For my Eagle Scout Project, I built a flagstone walkway for a homeschool theatre group I was in. They used someone's house to store the props and costumes, and the path to the costume shed would get muddy when it rained. So the project connected the house and the shed to provide a safe and clean path for the costume team. The project was funded by raking leaves, and with a brick landing in front of the costume shed with donor's names engraved in the bricks (using a laser engraver with special bricks). You can view some pictures that we compiled from my scouting career and from the project.