Projects
2023
Minimum Dominating Set
GithubThe minimum dominating set problem asks, “given a graph, you can color some vertices. If you color vertices such that every vertice is colored or is connected to a colored vertice, then the colored nodes are a dominating set. Find the smallest set that can dominate a graph.”
The brute force algorithm is O(2^n)
to test every possible set. The assignment was to find a graph that took our algorithm over 24 hours to run, compare that result to a heuristic greedy algorithm, and analyze the results.
I became fascinated with optimizing the brute force algorithm by testing all possible sets of size 1 before 2, all 2s before 3s, etc, allowing it to finish early. I am still patting my own back for the clever function I wrote to do this, and I’ll make a post about it soon. If you additionally split off all disjoint subsets in the graph and run the algorithm independently on them, the worst-case is reduced to O(2^(1/2)n)
.
listinglad.com
WebsiteI am creating Listing Lad with a friend who is a Boston-area real-estate agent. It will be a subscription based service marketed to real-estate professionals. Using a web extension front-end, automates the posting of sets of rentals to Facebook marketplace and, eventually, Zillow.
I have a simple website and database running with a few admin tools. My next step is to finish the user sign up and subscription process. After that, I will build out the web extension portion and my business partner will market it.
C-Server
GithubThis was a project for my computer networking class. We were the ‘server’ team and client teams were tasked with connecting to the server we wrote. It was interesting learning the lower-level C server protocols specified in <sys/socket.h> and I am curious about exploring other protocols sockets can be used for besides IPv4 internet. For example, there’s amateur radio, CAN bus, and bluetooth.
I’d already wrangled with pthread.h
in an Operating System’s class and I was able to realize the multithreading needed pretty quickly, so this didn’t wind up being a very difficult project.
Dräger Filter Finder
WebsiteI completed this project for my summer internship at eProcess Development. I chose React Native, because much of what ePD does is with React, and I could realize a cross-platform ios/android app with it. I interfaced with a client representative and designer who approved my progress as I iterated. I was able to complete the project ahead of schedule.
The essence of the app is that the user searches a flashlist of toxic substances. When they select one, they can see the Dräger mask filters that are rated for that substance. The client also wanted some custom animations that were challenging to get exactly right.
The biggest challenge was that the client’s policies required that we build with Microsoft Azure. I had to learn how to write an azure-pipelines.yml
file. This got tedious, because there was a lot of waiting for build results.
I might make a post about this. I ran into some specific challenges ejecting Expo, which was a development tool I used. These aren’t well answered in the Expo community, probably because Expo would prefer you to use their “EAS” service to build and deploy but, for those who are required to use Azure, a post about how to best approach it would be helpful.
betacus.com
WebsiteThe owner of the company I interned at had a passion side project called Betacus. He had been collecting data on horse racing results and making predictions for many years. He had a website and a few subscribers. The website was broken, and he asked me to take a look. I wound up rebuilding it from scratch.
I also built a scraper in Go to reduce data entry time. As of this writing, no subscription is required to access Betacus, so check it out while it’s free.
I made a post about Betacus going into more detail.
Tompiler
GithubTompiler was a group project for Language Translations. We had a 3 member group and the project was cumulative; the four assignments required that you built on the code you had started already.
We were able to identify some problems with the Context Free Grammer that had gone unnoticed for many years, causing the professor to change the language slightly for future classes.
This was quite enjoyable and we had a team committed to mastering the material. We went far beyond what was required, even generating documentation with Doxygen for our code base.
One fun thing I added was handling all the Token scanner logic with a wild DFA array that I generated with Excel. This doesn’t make for the most readable code, but it used no branching in the driver.
Scaf is general purpose, command line, project initialization tool.
Scaf is purpose-agnostic and can be used to start-up (“scaffold”) any type of project that has a directory structure.
Scaf works by maintaining directories of templates that the user supplies. When the user wants to scaffold a new project, they may use scaf to copy the contents from one of these directories into their current directory.
I originally wrote it in C++, but I migrated the entire project over to Go after winning the Code Jam.
This was my senior project. It allows users to post comments on any website on the internet through a web extension.
The front end is a browser extension written in Typescript and packed with Vite. The back end is a web server written in Go connected to a Postgres database. I designed the project last semester and am implementing it this semester. I am working with two other students. I am implementing the back end portion and assisting them with the front end.
The project is complete, but we chose not to launch it at this time.
search-exclude
GithubThere were two reasons I made this project. First, I wanted to get familiar with browser extensions because my senior project front end is a browser extension. Second, I am tired of seeing the same terrible sites high in my search results. I don’t want to see chegg, geeksforgeeks, or javatpoint ever again if I can help it. And I can!
The extension basically works. It loads, it saves your exclusion categories and site lists, and it excludes, though there are probably still some bugs. It works mostly by fooling around with query strings. It’s near completion, but I haven’t released it to the extension store, mostly because I am not satisfied with the styling and it hasn’t been tested thoroughly enough. I will finish and release it at some point this year.
std-swapper
GithubI wrote this small utility to assist with unit testing in C. I wanted to be able to test functions that depended on user input, such as those than call scanf
or getchar
. I also wanted to be able to test functions that produce output on stdout without cluttering my terminal during tests. I needed code that could simply swap out stdio and stdin with files and remove them afterwards. I wanted it also to be able to populate stdin with input I wanted to test.
There may be full-featured testing suites for C that offer this already, but I like using the lightweight CuTest for small academic projects.
Despite its small size, it has proven quite handy and I’ve re-used it a number of times.
2021
outerdocs
GithubI used sphinx to create some documentation from python code after using jsdoc on javascript stuff for a while. Sphinx had a feature I really liked that was missing from jsdoc; it allowed you to link external documentation through sphinx.intersphinx. I saw that jsdoc would be improved if it had the same functionality, so I created a plugin for jsdoc to add the feature. The plugin utilizes the @outerdocs
tag and a small bit of configuration to allow easy linking to specific members of externally documented modules. I felt it worked well and I opened a PR to add it to jsdoc. Unfortunately, the Pull Request never got merged, nor was feedback from the maintainer forthcoming. If any readers would like to comment on that PR and encourage the maintainer to merge it, be my guest!
Club-crawler is a dungeon crawler style javascript web game made with Phaser similar to the arcade classic Gauntlet.
I created this project while president of the UNHM Programming Club. I had hoped to get other members of the club to participate with me on it but it wound up just being me.
In the future, I may revisit this project and refactor it into typescript, as well as add more content. I think it has good bones, but it needs to be built out.
I created cencus-csv-parser while exploring choropleth data visualizations. I had acquired U.S. census data, which is distributed in massive, magnificent, but hideous CSVs. I needed a tool to parse these csvs into json objects that better captured the structure of the data. I also explored unit testing for the first time and used test-driven development throughout, which resulted in a solid and reliable project. I released it on npm, where it has gotten around 1000 downloads. I have no plans for further features and consider the project complete.
This was my final project for Systems Fundamentals at University of New Hampshire, Manchester. It consists of a vintage flight joystick handle I found on eBay, an accelerometer hot-glued to the inside, 6 wires soldered to an ethernet cable, and a Raspberry Pi and breadboard.
By pitching, yawing, and rolling the joystick, one can pitch, yaw, and roll a selected 3D object in Blender 2.7.9 running on a Raspberry Pi.
Originally, I planned for the project to include two more 3d-printed housings, to be strapped on the wrist and elbow area, which would capture complex arm motion for animation or game purposes, but I scaled the project down as deadlines approached.
I’m proud of the project, as I gained proficiency in areas I was new in, namely, low-level communications (like i2C), reading spec sheets, soldering, writing addons for Blender, matrices, and 3D generally.
I created this simulator to solidify my understanding of Physics formulas and concepts and to explore some programming technologies. It has gravity, collisions, air resistance, and orbits. The GUI is made in tkinter. It’s fun seeing how many bouncing squares you can add before you crash the interpreter. I picked python because it was the primary language taught at that university and I hoped to find collaborators, but it’s not the best language for the job and I have little interest in adding more features. It’s arguably complete, but it really serves no purpose other than to demonstrate that I can write python code.
2020
ReadWriteDisplayTriangles
GithubReadWriteDisplayTriangles was the project where I first decided that I wanted to switch majors and devote myself to programming. I took a Java Programming course as an elective while finishing up my A.S. in Paralegal Studies in 2020. I loved Java, and I went way overboard on this midterm project for the class requirements. I coded it all in notepad++ somehow. It’s ugly, but it works, it’s kind of cool, and it’s where I really started.