2023

Minimum Dominating Set

Github
An analysis of brute force and greedy algorithms to find the min dom set.
c++
ongoing 36 commits more...

The 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

Website
An automated listing tool for real estate agents.
go javascript browser-extension
ongoing 25 commits more...

I 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

Github
A TCP server written in C.
c
complete 28 commits more...

This 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

Website
A mobile app for finding the right filter for your toxin.
javascript react-native azure
complete 169 commits more...

I 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

Website
A website for visualizing horse racing results and simulating bets.
php react mysql go vite chakra
complete 189 commits more...

The 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

Github
A simple compiler, featuring a scanner, parser, type checker, and code generator.
c
complete 135 commits more...

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

A universal project scaffolding tool.
c++ go
complete 14 commits more...

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.

comment-anywhere

Github Website
Add comments to any webpage on the internet.
go typescript postgres docker sqlc vite browser-extension
complete 150 commits more...

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

Github
Exclude unwanted sites from your search results.
typescript webpack
ongoing 28 commits more...

There 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

Github
Easily point stdin and stdout to files.
C
complete 7 commits more...

I 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

Github
Link external documentation in jsdoc.
js jsdoc
complete 17 commits more...

I 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

Github Website
Defeat the ogres in a top-down browser shooter.
js phaser node parcel
hiatus 116 commits more...

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.

census-csv-parser

Github Website
Convert csvs to json based on your specifications.
js npm
complete 41 commits more...

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.

blender-motion-joystick

Github Website
Rotate and move objects in Blender using a two-button joystick with an internal accelerometer.
python i2c
complete 18 commits more...

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.

physics-simulator

Github Website
Watch squares bounce around a tkinter canvas and off each other.
python tkinter sphinx
dead 25 commits more...

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

Github
Move and color triangles to make and save art.
java
complete 7 commits more...

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