Hi! I'm Nicholas, a software engineer based in San Francisco.
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.
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.
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.
A minimalist web app for randomly selecting a member of a group to cover a shared expense for probabilistic expense sharing.
Dashboard for public-transit departure times to help Uncountable coworkers time their departures from San Francisco office.
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:
Farther utilizes several components from Nearer, a similar service from Blacker Hovse (licensed under MPL 2.0).
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)
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.
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.
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.
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 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 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.
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.
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.