Projects Archive
Built a landing-page and documentation website for my Computer Science senior design challenge project.
Rust API
It is straightforward to build a REST API in
using . As a proof-of-concept for an upcoming project, I tried out building a REST API in using . Rust is advantageous since it offers C-like performance without the associated memory safety issues. The API has a database backend using .This project is part of a bigger personal project that's in the works — stay tuned!
Networking and job applications management platform for college students.
Built with
, , and built with .Collaborative project with
, , , and .A minimal Youtube player that lets you watch videos without distractions.
Built with
Post-it-note style platform for organizing your thoughts and ideas.
Built with
, , and .An API endpoint that supports the standard game of Kahoots.
Built with
, and Data stored on .An API endpoint that supports the standard game of Kahoots.
Built with
, and . Data stored on .Built with vanilla
, , and .Wrote a functional program in Haskell to scrape 3000+ articles from online technology websites such as
- ,
- ,
The scraper uses
and , among other functional programming patterns to ensure concurrency and efficiency. The articles were used for a subsequent study on the changing attitudes of society toward technology.The dataset is open-source and available on
.Collaborative project with
and .Generative Pre-trained Transformer
For fun, I implemented the
(GPT) architecture in PyTorch. GPT is a language model that uses a transformer architecture to generate text. I trained the model on the and used it to generate text in the style of Shakespeare.Transformers are a type of neural network architecture that employes techniques such as:
- , which allows the model to learn the relationships between different parts of the input data.
- , which allows the model to learn the relative positions of the input data.
- , which allows the model to learn different relationships between different parts of the input data.
- , which allows the model to learn the difference between the input data and the output data.
Adversarial Training for Neural Networks
Experimentation with various adversarial training techniques for neural networks. Adversarial training is useful to improve the robustness of neural networks to adversarial attacks — which often happen as noise in the input data. Techniques explored include:
- , which helps the model have more data to learn from. New samples are generated by randomly cropping and/or flipping some images. We also add , to a random subset of images, which helps the model learn to be robust to noise.
- , which entails randomly blocking a subset of the neurons in the network from transmitting information during training. This helps huge models avoid overfitting, thus generalize better.
- , which entails training multiple models on the same dataset and then averaging their predictions. This helps the model generalize better by mitigating the effects of a single model overfitting.
Hyperparameter Tuning for Neural Networks
Experimentation with how variations in specific hyperparameters affect the performance of neural networks. Hyperparameters are parameters that are not learned by the model, but are instead set by the user. Usually, such hyperparameters control the learning process of the model.
As part of a
, I implemented neural networks to demonstrate how predictions work in the context of simple classification and regression problems.To keep my coding skills sharp, I solve a few Leetcode challenges every week. I also make a point to write up the solutions and explanations so a future, forgetful me can review them.
Actor Network Semantics
The infamous Kevin Bacon game; given any two actors, find the shortest social connection path between them. We use
the strategy to find the shortest path in the of connections.Efficient Spatial Collision Detection
Program to efficiently detect collisions between blobs in 2D space by using
to partition the space into smaller regions and index which blobs are in which region.Cam Paint
Interactive program that allows the user to draw on a canvas using their webcam. The program detects the color of the paintbrush and draws the path of the brush on the canvas.
Pathfinder
An interactive program that renders locations on a campus map and highlights the shortest path between any two points the user clicks on. We use
to find the shortest path.Relational Database App
A
with a frontend and a backend, including various triggers and automations.Collaborative project with
.Logisim Processor
A fully functional 16-bit
implemented in . All CPU components including the , , , , , , , and are implemented from basic gates.Nuggets Game
A multiplayer command-line game of
. Players join over . The maze is gradually revealed to each player as they view different sectors of it. The game ends when all the nuggets are collected, and the player with the most nuggets wins.Collaborative project with
and .Tiny Search Engine
A hyper-efficient
that crawls webpages (whose domain can be restricted to a given subset) and indexes them, then handles user queries on the contents of the collection of pages, with results ranked by frequency. It also supports query modifiers such as AND, OR, and NOT.Command-Line Utilities
Three different command-line utilities written in C:
- chill calculates the chill factor of a given temperature and wind speed.
- words efficiently prints out the words in a file.
- histo prints a histogram for a stream of numbers.
Bash Scripting
Hacking our way out of various scenarios with bash scripting.
Includes processing streams of data using sed, matching string patters in files using grep, extracting bits of data from files using head / tail / cut / sort / uniq, and more.
Collaborative Editor
A collaborative editor on shared canvas. Multiple users can connect, and each sees changes in real-time as they are made. We use mutexes and locks to enable concurrent access whilst avoiding data races and deadlock pitfalls such as mutual exclusion, hold-and-wait, circular wait, and no preemption.
Linear Regression Classifiers
Using
and models to find an optimal learning strategy for a given set of data.Gradient Descent
Using regression models to classify provided data. The models are not pre-trained, se we use
to find the optimal parameters for the model.Position-Based Dynamics
Using a position-based system with constraints (instead of the more common mass-spring model) to simulate bodies. The method, as described in
, offers several advantages over the mass-spring model including being more generalizable to other scenarios and requiring less computation to simulate a body.Rigid Body Simulation
We use rotational dynamics to simulate a
, using rotor blades to generate lift and thrust. We use the to numerically integrate the equations of motion.Smoke Simulation
Using Physics-based simulation to simulate a fluid-flow system. We use the
method to simulate the for smoke. We also apply the method to simulate the of the fluid. To reduce the computational space,we use a to store the fluid particles.Particle Simulation
Using Physics-based simulation to simulate fluid and particle systems.
We use the
For particles, we use positional indexing to efficiently detect collisions and propagate forces between particles.
Hair Strand Simulation
Using Physics-based simulation to animate a hair strand using connection and bending constraints. The simulation is implemented in C++ using the
framework.Astronomy Simulations
A Physics-accurate simulation of mass bodies (stars, planets, etc.) in a 2D space. The program uses the
library to display graphics and allows the user to arbitrarily add more bodies to the simulation by clicking, adding bigger bodies by holding for longer, etc.Pong Game
An interactive GUI game of pong that uses the
library to display graphics and handles user inputs, detects collisions (for the game), and tracks scores as well as the high score in the current streak of games.Wordle, Grep
Wordle and Grep replicas implemented in Haskell, a
language. is a program picks a random five-letter word out of a corpus then lets the user guess the word, providing feedback at every iteration. The game is won when the full word is guessed, usually in at most 5 tries although my version allows playing in infinite mode. The original game was created by . is a program that matches a string prompt to a text-stream, e.g. from files. Basically, it's Google search for your local file contents.Robot Colocation
A common problem in robotics is localizing a robot in a novel environment given sensor readings. This project uses
and the and the to decipher where a robot's situation probabilities in a maze, given a sequence of sensor readings from the robot. Emissions due to sensor inaccuracies are also factored in.Logic Algorithms
Still, there are several algorithms that attempt to cut down the search space in order to find a solution in a reasonable amount of time. In this project, we implement two such algorithms,
and , and use them to solve puzzles modelled as first-order logic clauses.Constraint Satisfaction
Using
and to solve constraint satisfaction problems such as map coloring and circuit placement. We use heuristics such as least-constraining value, most-constraining variable and minimum remaining values to intelligently narrow the search space.Informed Search
Using informed search techniques such as
and and heuristics such as and to navigate a robot through a maze with obstacles to a goal location.Intelligent Chess bot
A chess bot that uses various strategies including
, , , , , , , and to maximize outcome against an opponent in chess.Uninformed Search
Using uninformed search algorithms such as
and to search the solution space for elementary problems such as the 🐔 and 🐶 problem (we wish to get x chicken and y foxes across a crossway with limited carriage capacity without leaving any chicken unattended with the foxes).Parts-Of-Speech Tagging
A bot that uses
to tag parts of speech in a sentence. We use the to generate a sequence of tags for the sentence keeping in mind the tag probabilities for each word and the transition probabilities between tags.Huffman Coding
A program that encodes text using a lossless compression algorithm. A
is built from the text. Thereafter, binary codes are assigned to each character having the most frequent characters get shortest codes.City Demographics
An interactive program that processes provided raw data about world city populations and other important metrics and renders the cities on a map highlighting standout locations or other interesting data-points.