Computer Science Projects

+ Expand All

Corelink C# Client

Summary

During the 2019 - 2020 school year, I was working on the NYU Holodeck. When the coronavirus pandemic hit, I spent my time working on Corelink. I contributed to the website and documentation, incorporating audio streaming, and most importantly I created a C# library to interface with Corelink inside Unity. The documentation can be found here.

With this library, I was able to create a multiplayer sandbox inside Unity with two cubes.

Demo Videos

Checkbook Processing (Fall 2016 - Fall 2017)

Summary

When I got to college, I decided to get into good habits and keep a thorough history of my spending. I started writing it down, but that got tedious, and I ran out of space. So then I started making spreadsheets. Over the next two years, I created something similar to the app Mint, except I micro-managed everything, and it doesn't connect to my bank account.

The end goal of the project was to come up with this kind of pie graph:
Pie chart I also connected it to SMS, so I can text a number to get recent history, current balance, and the chart.

Technical Information

So now the details!

It starts off as a Google form. I put in the date of the transaction, where/who, category, whether it's debit or credit, and the amount of the transaction. I chose the categories myself, and they are customizable. I based the categories off my personal spending goals and habits.
Form screenshot

This information is connected to a Google spreadsheet called "Responses". The spreadsheet gets a new row each time there's a new form submission, which is how Google forms work. I used Google Apps Scripts and created a script that would sort the submissions by the date of transaction whenever the spreadsheet was opened. This is in case I submit transactions out of order, or I have to delete one.

Then, I have a separate spreadsheet called "Checkbook Processing". I wrote another Google Apps Script that automatically copies the data from "Responses" into this spreadsheet when this one opens, so the data is auto-populated.

Then the complicated mess begins. I have a section for each category that will look to see what the category is, and it will add up how much I spend in that category. Here's an example: Screenshot Note: I froze the left side in order to make them constantly visible, which is why the letters at the top don't follow alphabetical order. In this example, the column "Food Status" looks for what's in row D. If it's "Food", it looks for what's in row E. If row E is "Debit", it will write what's in row F. "Percentage Food" divides the total amount I spent on Food with how much I spent in total. "Food Status Total" sums it all up.

I have three columns similar to this for every single category, and I automated it all with spreadsheet formulas so that it automatically populates with data every time the spreadsheet opens. The formulas are in place for a large number of cells, let's say until row 500. Then, I take the all the totals from row 500, and I have a formula that takes those values and puts them in a different sheet that compiles of all my totals into a table.
Table screenshot

Then, I make the pie chart based off the data in that table!

The beauty is that the data populates itself. Granted, I do have to submit a form every single time I pay for something, but still. Better than writing it all out.

I'm currently in the process of making this more mobile-friendly instead of having to go on a computer to input and view all the results. Right now, I can text "Chart" to my Google Voice number, and I have a script setup so it will text me the picture of the pie chart. I also have it setup so I can text "Hist", and it will text me the last 5 entries I put in, in case I'm submitting forms on my phone and I forgot what I entered in last.

You're looking at it! (Fall 2017 - present)

I built this website basically from the ground. I borrowed a template, then I hacked it apart, modified it, added my own pictures, etc. I edited all the HTML, CSS, and JavaScript. I set up my own server, bought my own domain, and here it is! It's still a work in progress, and it will show my own progress over time

Google Spreadsheet Password Database (Summer 2017)

Summary

A friend of mine was in a collective where, long story short, one person went rouge and went haywire with all their social media accounts. I was thinking of ways to go about increasing security, which eventually became this project. This is a DIY project that is meant to store and protect passwords within a small collective (~10 people).

Each member is invited as an editor to a Google spreadsheet with all of the usernames and passwords. However, upon opening the file, the usernames and passwords will be encrypted. There is a menu option on top to decrypt the spreadsheet. This requires a password. The member texts a passphrase to a specific number, and the number will text back with a password. The member’s number is verified through the generation system before texting back. The password changes every day at midnight. Enter in that password, and voila, the document will decode to normal text. When done, there is another menu option to re-encode the spreadsheet.

Here’s what it looks like:

Screenshot 1
screenshot 2
screenshot 3
screenshot 4

Technical Details

I used Google Apps Scripts for this to connect Google Voice, Gmail, and Google Sheets. There are two spreadsheets – the database spreadsheet which is shared with all the members and a private user database spreadsheet which contains the email addresses and phone numbers of each of the members. I have a script that uses TOTP standards to come up with the password for the day. There is another script that runs every minute checking my Google Voice text messages for the specific passphrase. If it finds the correct passphrase, it will run through the private user database spreadsheet and check the phone number. Then, it will send the text of the password of the day back. The last script is attached to the spreadsheet using a script that Arun came up with here. I cut down his original code and stripped it down to the essentials that I wanted.