Personal Projects

PaladinsTracker is a Discord bot, utilizing the Hi-Rez API and MongoDB to fetch live player statistics. You can read more about it here .
Unlike other bots, PaladinsTracker can not only display users' statistics, but also track changes in them. It also is capable of reconstructing malformed matches, and stores extra information such as a user's Platform ID.
Additionally, to improve user experience, I optimized the bot's performance by using asynchronous operations, caching, and enhanced database queries, resulting in a speedup of over 5x.

This project is split into two parts: research and implementation. You can read more in my blog post .
For the research, it involved me writing a research paper which is available here . The paper discusses the mathematic behind lattice-based encryption schemes - namely, the GGH Cryptosystem. It also further explored attacks and recent improvements on the scheme, along with a cryptanalysis of the scheme.
Afterwards, I implemented the original scheme outlined by Goldreich, Goldwasser, and Halevi in Python. In order to improve numerical stability, I also explored other libraries (such as symPy) in order to mitigate decryption errors. This allowed the implementation to handle higher dimensions, and thus work with longer messages.

The Audio Visualizer uses the FFT algorithm to convert audio into frequency-domain information, which is then used to generate dynamic graphics visualizing the audio played.
Using FFT data, we created 3D objects that generate, move, and change colors in response to the audio's frequencies. Additionally, we implemented a fluctuating polar graph, where each point corresponds to a frequency value to create a tunnel effect. Lastly, we created an audio-responsive 3D terrain using Perlin Noise. A demo is available here .

This is a repo of my LaTeX setup. It includes .sty files for my homework, course note, presentation, and paper templates. The templates feature a wide range of custom environments made using tcolorbox and thmtools, along with environments which takes in optional parameters implemented with xparse.
Alongside my templates, the repo also contains macros I wrote for my courses which makes TeXing faster and more efficient.
Coursework

This project is focused on optimizations to better the runtime of a naive implementation of the 2D Convolution Algorithm.
In order to optimize the base algorithm, I applied different techniques such as working with pointers directly via pointer arithmetics, reorganizing the order in which the steps were executed to optimize cache usage, and using registers for commonly-used variables.
The project also used OpenMP to introduce parallel programming, significantly reducing the runtime even more. Also, by using SIMD instructions to vectorize operations, along with loop unrolling, the runtime was further reduced. Overall, the optimizations led to a speedup of around x50.

In this project, I built a real-time cloth simulator using a spring-mass based system in C++. The simulator features accurate collision interactions, a variety of shaders, and also realistic ambient wind interactions. More about this project can be read here .
Simulation is done via Verlet integration, allowing for both fast and reasonably realistic results. In order to speed up collision calculations, spatial hashing was utilized, reducing runtime from quadratic down to roughly linear time, allowing for a user-friendly, real-time simulator. Time-varying winds were also implemented, using trigonometric functions to model their path, and basic physics to calculate their effect on the cloth.
The project also used GLSL to implement a variety of shaders: Blinn-Phong shading, Texture Mapping, Bump and Displacement mapping, Environment-mapped Reflections, and also a custom custom emulating comic books.

The goal of this project was to implement a filter that detected whether or not an email was classified as spam or ham using a Logistic Regression model.
For the project, I had to clean up the dataset and filter out all of the noisy data, analyze the relationship between possible features and their class in order to determine the features to be used, and also extract key information from emails.
Finally, in order to finetune the hyperparameters of my model, I used GridSearchCV. Ultimately, I created a model that yielded an accuracy of around 99.2% on the testing data provided.

Over the course of this project, I learned to use PyTorch on a variety of machine learning problems, ranging from approximating a sinusoidal curve to digit recognition and language detection.
For recognizing digits, I initially implemented a two-layer Linear Neural Network with a ReLU activation function and Cross-Entropy loss. Later on, I implemented a Convolutional Layer as well to take into account things such as spatial features of the image, and then flattened it down. Ultimately, my model achieved an accuracy of over 98%.
