This console app built with C# and .NET Core implements the functionality of the built-in command line tool ping. Ping is a diagnostic tool used to test the health of another device by "pinging" its IP address. It uses the ICMP protocol and sits at the network layer. Sending pings (data packets) synchronously at the network layer can prove to be a bottle-neck when pinging a large number of devices. Using UDP transport protocol and sockets to send and receive pings asynchronously, this application tremendously reduces round-trip packet times and the time to ping multiple addresses. This was a fun first project using C# and .NET. I especially liked how intutively concurrency is handled in C# and used that to implement asynchronous pinging.
Abstract: Glioblastoma is an aggressive cancer in the brain capable of killing a victim within six months and with a 17% survival rate after two years [12]. Immediate diagnosis and rapid treatment is essential to survival. However, pathologists still diagnose and analyze tumors manually by studying microscopic slide images (histologies) from tumor biopsies, an inefficient and error-prone process. This project contributes to ongoing research efforts to automate histopathology with machine learning tools by attempting to build a Convolutional Neural Network to classify the percent tumor necrosis in glioblastoma tumor histologies. This metric of tumor analysis proved to be a difficult problem: our model achieved at best a 37% accuracy in ten-way classification by patch, but did well in estimating a range of necrosis percent values by considering its top predicted classes. Despite a lightweight design and minimal training, our model shows promise for future research in tumor necrosis detection and estimation with highly-labeled data.
My first experience in independent research was my junior fall semester in Tom Griffith's computer science and psychology course Probabistic Models of Cognition. Under the advising of graduate student Raja Marjieh, I explored the question of how we perceive similarity between musical chords. There are many models of similarity, usually represented by some distance function, that have been proffered. I tested several of these models along with a new one, consonance difference, againt survey data that Marjieh had already gathered in other research. I used Python to implement the similarity models and perform data analysis. My work found that the minimal voice-leading distance model worked best, that consonance difference is a predictor of chord similarity, and that combining the power of both these models increased our ability to predict perceived similarity. You can see my Jupyter Notebooks and report on GitHub (unfortunately, I cannot share the data yet as it is unpublished).
For my final project in Principles of System Design, I partnered with my friends Aidan Walsh and Gavin Leising to implement and analyze ARC. We studied the original paper from IBM and implemented a simulation of the caching algorithm using Golang. ARC is an adaptive cache containing least recently used (LRU) and least frequently used (LFU) queues whose sizes adapt according to the needs of workload. We analyzed its performance in comparison to basic LRU algorithm by using simulated workloads generated by a trace. The algorithm was fun to learn about and a powerful example of an adaptive data structure.
One of my biggest personal projects to date is this website, which I have been working on since January 4, 2023. I had never done any kind of web development before, so it has been a fun learning experience. The site is hosted on GitHub Pages and all of its files are stored in this public repository. I am using HTML and CSS to build the website and Bootstrap 5 as a framework. I would like to learn and use some JavaScript in here too.
A collection of projects in Golang involving various concepts of system design: sockets, HTTP routing, caching, SQL database, and concurrency.
A collection of projects in C and Assembly* involving various concepts of systems programming: decommenting (preprocessing step), string manipulation, symbol table, large integer addition*, and buffer overrun attacks*.
A collection of projects in Java involving various data structures and algorithms: percolation simulation using union-find, queue implmentations, autocompletion using binary search, WordNet using shortest paths, image resizing with seam carving, and Burrows-Wheeler compression.