Nicholas Currault

Hi! I'm Nicholas, a Computer Science major at Caltech in the Class of 2021. I spend most of my time on coursework and upholding Caltech's Honor Code, but I spend some of the remaining time creating and maintaining personal projects to benefit the people around me. This website is a list of these projects.

In-Class Projects

Machine Learning

  • Worked with a team of other Caltech students to generate a model to predict cases of COVID-19 in the U.S. as part of a Caltech challenge
  • Used hidden Markov models and recurrent neural networks to generate poems in he style of Shakespearean sonnets
  • Created data visualizations of the MovieLens dataset using matrix factorization algorithms

Systems

  • Worked with group of Caltech students in Operating Systems course (CS 124) to complete an implementation of the Pintos operatings ystem
  • Created a command shell that supports input/output redirection, piping, EOF (Ctrl+D) to exit
  • Threading library in C and x86-64 assembly
  • Explicit heap memory allocator (with best-fit strategy, constant-time memory deallocation)
  • Implementation of an 8-bit Harvard architecture soft CPU with support for about 100 instructions in a hardware description language for a CPLD.

Miscellaneous C++ projects

  • Sudoku command-line interface and solver
  • Convex Hull algoriths (Gift Wrapping and Graham Scan)
  • Maze solver
  • Seam carving algorithm implementation
  • Fast Fourier Transform
  • Conway's Game of Life
  • Program to search for word ladders
  • Implementation of Huffman Encoding for arbitrary files
  • Implementations of Depth-First Search, Breadth-First Search, Dijkstra's Algorithm, A* Search, and Kruskal's Algorithm using Stanford's C++ BasicGraph class

Hash Function Fixpoints

Source Code

I used CUDA to search for hash fixpoints in SHA-1 Merkel Trees to automatically make a git commit that references its own hash prefix.

After implementing this project for both the GPU and CPU (using C), I compared the implementations and determined that the GPU implementation generated 8-character prefixes over 200 times faster than the CPU alternative.

Project Euler

Problems

In my spare time, I have worked through several Project Euler challenges using Python. The image below should auto-update to reflect my current tally.

Othello

Source Code

As a final project for CS 2, I worked in a group to create an AI that played Othello. Our bot, '); DROP TABLE TeamNames; --, utilized minimax with various efficency optimizations to predict the board state 9 moves ahead in the allotted game time. It finished 28th out of 83 bots in the 2018 tournament.


Web

Dabney House website

View Source Code Template

As Comptroller, an elected position within Dabney Hovse at Caltech, I worked to set up a Linux server, remake our House website, and assisted Darbs (members of Dabney Hovse) with creating accounts and using services.

Farther

View Source Code

I created an online service for events in Dabney Hovse that allows users to submit YouTube videos to be queued and played on public speakers (and, optionally, a display).

Farther has three components:

  • a PHP backend that handles user requests and records songs in a database
  • a Python backend that manages the queue
  • a Python client running on a Raspberry Pi that interacts with the Python backend to play the proper videos on the Pi's 3.5mm audio and HDMI outputs.

Farther utilizes several components from Nearer, a similar service from Blacker Hovse (licensed under MPL 2.0).

What's for Dinner?

View Source Code

"What's for Dinner?" is a service for Caltech students hosted at dinner.caltech.edu created before I matriculated. It parses menus from Caltech Dining Services (CDS) to display the dinner options for each specific day. When CDS changed menu formatting, this service stopped updating, so I fixed it and became the main contributor to the project.

In The Chips

Source Code

As a final project for a high-school economics class, I implemented a game with an online interface that enabled players to interact in real time and explore the market effects. The game recorded "transaction data," enabling the computation market data: consumer surplus, producer surplus, and deadweight loss (when we "imposed a tax," tweaked the buyer/seller ratio, or otherwise shifted the supply and demand curves)

Brady vs Grey (Original)

View Source Code

This was my first popular application. It was inspired by Hello Internet, a podcast of which I am a fan. The app uses the YouTube Data API to tally videos on several channels. This app was mentioned on the podcast and received over 12,000 pageviews in the following month. Since then, it has received a total of over 73,000 views by people from all 50 states and 132 other countries.

I also learned the hard way how embarrassing mistakes can be. Within a week of its debut, I deployed a feature that gave an average number of views. However, when the number of videos that matched the criteria became zero (due to a new video by CGPGrey), the app tried to divide the total views (0) by the number of videos considered (0). This attempted division by zero threw an error. I promptly fixed it, but in the interim hundreds of people had seen a "500: Internal Server Error" page.

Brady vs Grey (Improved)

View Source Code

A few months after Brady vs Grey's success, a friend recommended that I clean up the aesthetics of the app. I agreed, and also wanted to reprogram the app using PHP, a language I had planned to begin using.


Telegram Bots

Telegram is a messaging app (notable for its security and open API) that is popular among Darbs. Because of this popularity, I have spent time independently learning about and working with the Telegram API.

Ranked Pairs

View Source Code

While Telegram has standard, first-past-the-post polls (in which users can select a single) built in, this voting system has several flaws. A better (although necessarily imperfect) system is Ranked Pairs, which has many advantages over first-past-the-post and is thus used in most Caltech student government elections.

When a Telegram poll was to select a movie to watch one night, the utility of a bot to run the ranked-pairs tallying was noted, and I made this bot, which emulates the Telegram polling interface but allows users to express rankings and tabulates the results with RP.

Sticker Forwards Bot

Source Code

Telegram allows users to forwards messages from other users among chats. In Dabney, a result of this feature was people forwarding each other's messages to express a common sentiment. From here, users began screenshotting these messages to form sticker packs of relevant messages. I made this bot to auto

Because the bot itself links to sticker packs with quotes from users' friends, the actual bot username is not shared publicly to protect these people's privacy. Email me@nicholascurrault.com to request access.

Quantum Go Fish

View Source Code

Quantum Go Fish is a game in which players play Go Fish, but nobody knows what their cards are or even what the suits are. They take turns asking each other for suits, thus making "quantum measurements" of each other's hands. The winner is the first player to fully converge the game state with a question.

I learned this game at Caltech and, because of the amount of information players must keep track of, I decided to implement the game as a Telegram bot similar to Secret Hitler (another Telegram project).

Secret Hitler

View Source Code

Secret Hitler is a popular social-deduction board game. After playing several games at Caltech, I worked with some other fans of the game to design a Telegram bot that can moderate text-based games of Secret Hitler.

Tag Yourself

View Source Code

It is a common pastime at Caltech (at least among Darbs) to draw axes on communal whiteboards and encourage others to plot where various people or ideas fit. One example plot was made recently to show the lack of correlation between understandability and relatability. (For example, sufficent sleep is understandable but not relatable, and deciding to attend Caltech is relatable but not understandable.)

I used a Telegram bot to emulate this phenomenon virtually, using matplotlib to give our shenanigans a sense of scientific validity.

Copypasta

One common element of Telegram conversations I am involved in is the frequency of copypasta -- blocks of text that are pasted into relevant conversations. I made a Telegram bot that allows Darbs to submit copypasta and easily insert it into Telegram conversations.

To protect the privacy of Darbs who submit content for the bot, the actual bot instance and codebase are kept private. Email me@nicholascurrault.com to request access.