I'm a software developer, maker, and Linux nerd. I aim to contribute to software and electronics engineering projects that improve privacy, push for open standards, help people in need, and provide tools and building blocks for other projects. I endorse free (libre) and open source software, open hardware, digital rights, net neutrality, and consumers' right to repair.
Click images to view project info. Circular icons link to the code, demo site, video, etc.
ArduinOLED
2017
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 (I was featured!) and the open source library I wrote and published on GitHub/SourceHut. I designed and ordered the printed circuit boards on EasyEDA.
NASA Goddard Space Flight Center (GSFC) Internship
summer 2017
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. The photo is me (on the left) and my mentors at the showcase in front of my poster.
Boggle Online Game
2016-2020
Boggle is a word game my family likes to play. One day, we were wondering how many words we missed, so I coded up a python program to find all the possible words on any given boggle board. Then we would play normally, enter the board into the script, and instantly feel dumb for missing some obvious ones. The next iteration 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. ;) Over the years, I have updated the game and recently redesigned it to use Flask, Vue.js, MongoDB, and some decent CSS.
JHUAPL Internship
Jun 2015 – Aug 2016, summer 2018, Jan 2019
I interned for JHUAPL (Johns Hopkins University Applied Physics Laboratory) 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.
FIRST Tech Challenge (FTC) Robotics
2013-2017
I competed in FTC robotics in highschool, and now I serve as a mentor. In 2016, we won East Super-Regionals, and received a finalist nomination for control systems at the World Festival (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 state machine library, and an Android library with a lot of our generic code. We taught an OpenCV computer vision 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 publish info about the team.
Obnoxious Scheme to Convince All to Recycle (OSCAR)
Apr 2019
At the University of Maryland Bitcamp hackathon in 2019, OSCAR was born. OSCAR was so amazing that it won Most Entertaining Hack, and the president of the university even tried it out and had a laugh. OSCAR is a talking trash can that insults you (video) 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" which even the IBM folks who were there told us it was trash, no pun intended...). 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.
state-machine-framework
2016-2018
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.
johanv.xyz
2019+
My website, which you are looking at now, is hosted on a server in my own basement. It uses the Proxmox hypervisor with a VM that runs dokku, an open source docker-based platform-as-a-service that allows you to deploy subdomains with a git push. Some of the subdomains I have are the main site, some games, and a mindmap tool.
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 who followed my scratch profile spoke Spanish :(. CARL was later upgraded in January 2018 at Hoya Hacks, a hackathon at Georgetown University, to a python web application. Please talk to CARL so he can learn more phrases!
Stoichiometry
2016-2017
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.
Answermator
2021
At University of Maryland, I took a software development class in my senior year where we learned by working on a team to create a software project. My team was Answermator. Answermator is the private, open source tool for DIY’ers to take control of incoming calls from a web interface at home, or call in from a cellphone to run anything that can connect to a Raspberry Pi. A Raspberry Pi attached to a USRobotics USR5637 USB Modem serves as the core of the device, which can be connected to a landline and the user's phone. The Pi is the main user interface, with the user's phone as a secondary interface.
Home Server
2018+
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, forward 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. Then we back up all the data to another computer in a different location with ZFS's incremental data stream capability. After a year, we started renting out our unused disk space with storj.io running in a docker container.
zfs-server-cluster-setup
2019
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
2016
For my Eagle Scout Project, I led the scouts in building 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 to the shed which provided 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.