D. Nicholas Currault III

Hi! I'm Nicholas Currault, 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.

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"

View Source Code

As a final project for a high-school economics class, I implemented a game we had played in class with an online interface that enabled players to interact in real time. The game recorded "transaction data," enabling me and a classmate to compute 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.


Desktop Apps/Scripts

In-Class Projects

In my experience in both Stanford's CS 106B (summer 2016) and several Caltech computer-science courses, I created several noteworthy programs for assignments. Due to the honor codes of both colleges, I cannot post most of this code online.

Caltech CS 155

  • Shakespearean sonnet generators with Hiddent Markov Models and Recurrent Neural Nets
  • Matrix factorization-based visualizations of the MovieLens dataset

Caltech CS 24

  • Threading library in C and x86-64 Assembly
  • Explicit heap allocator in C (using best-fit strategy, constant-time deallocation)

Caltech CS 2 (all in C++)

  • Sudoku command-line interface and solver
  • Convex Hull algoriths (Gift Wrapping and Graham Scan)
  • Maze solver
  • "Seam carving" algorithm
  • Implementation of the Fast Fourier Transform

Caltech CS 11 (all in C)

  • Calculating the date of Easter
  • Solving the "Triangle game"
  • Implementation of a simple virtual machine

Stanford CS 106B (all in C++)

  • A text implementation of Conway's Game of Life
  • A "word ladder" finding program
  • A program that uses ngrams to generate text that sounds like an original source
  • A maze solver
  • An anagram finder
  • A Boggle player and checker
  • An 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

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.

Project Euler

Problems Solutions

In my spare time, I have worked through several Project Euler challenges using Python.