Here are some personal and group projects I have done. Some descriptions of the projects or some screenshots and links to the GitHub repositories are also included.

Java:

Python:

C:

Course Planner

I took a J-term course "WebApp development for the Mobile Cloud World" offered by Google in 2019, and made this project with two other students. This Android app is for Mount Holyoke students who want automatically generated course plans based on the classes they are interested in. The user can search for the classes and add classes into the course cart. The app could generate all possible course schedules with specifications, such as credit limits and the number of classes taken.

My main contributions are scraping course information from the website using Python, create search page and enable the user to search for a class. Here are the GitHub repository and the demo of the app. Back to top

WordStack, Scarne's Game, Anagrams

They were some practice projects in the J-term course offered by Google. The descriptions below are adapted from https://appliedcsskills.withgoogle.com.

WordStack uses Stack to keep track of the letters from two words shuffled by the program, and the user can separate out two words of length 5 whose letters have been scrambled (but the order of the letters has been preserved).

Scarne’s Dice is a turn-based dice game where players score points by rolling a die and then: if they roll a 1, score no points and lose their turn. If they roll a 2 to 6, they can add the rolled value to their points (turn score) and choose to either reroll or keep their score and end their turn. The player can play with the computer.

Anagrams provides the user with a word from the dictionary. The user tries to create as many words as possible that contain all the letters of the given word plus one additional letter. Note that adding the extra letter at the beginning or the end without reordering the other letters is not valid. The user can give up and see the words that they did not guess. Back to top

Tetris Game, 20 Questions Game

CS 201 Advanced OOP in-class projects. Tetris game uses MVC design, abstract classes, and inheritance. 20 Questions game uses tree structures and XML file parsing. Back to top

Research Assistant work

I have been a research assistant for Prof. Norling in the Department of Economics since September 2018. He is working on a research project about the influence of natural disasters on people affected. Given a list of disaster locations, my main work is to process the raw data using Python, identify different layers of locations, and find the corresponding location code from Global Administrative Unit Layers database.

I am also a research assistant of Prof. Packard in the Department of Psychology since September 2018. She is investigating the effectiveness of Active Learning Modules on students who took CS courses in the past years. My job is to summarize survey responses using Python generate the datasets containing changes from pre-survey to post-survey using Python. Back to top

Web Scraping program

A program that could automate the web browser to search specific keywords, click on checkboxes, scrape the result and write to the spreadsheet. Here is a short demo. Back to top

Readers-Writers Problem

CS322 Operating Systems in-class project. The Readers-Writers problem is a classic problem. There are several readers reading the data and several writers writing data. When a reader is reading the data, the writer is not allowed to write the data at the same time. When a writer is writing the data, the readers cannot read the data at the same time. Used mutex lock and semaphores to simulate the process. A binary semaphore for mutual exclusion and a binary semaphore for writing/reading authorization were used. Back to top

Bounder Buffer Problem

CS322 Operating Systems in-class project. Bounded buffer problem is a classic synchronization problem and also known as the producer/consumer problem. There are some producer threads and some consumer threads. Producers will put data in the buffer, and the consumers will get/consume the data from the buffer. The buffer is shared by all producers and consumers, so it is important to avoid the race condition and ensure mutual exclusion.

The producer will put the data into the buffer only when the buffer is not full. The consumer will get the data only when the buffer is not empty. The buffer works as a queue: the producers put the data in order and the consumers get the data in order. Used mutex lock and semaphores to simulate the process. Back to top

Dining Philosophers

CS322 Operating Systems in-class project. Simulate five philosophers eating dinners using five forks. The first implementation contains deadlock, the second implementation fixes the deadlock by letting one of the philosophers holding left fork first. The third implementation makes philosophers put down the fork when the other one is not available. Used binary semaphores to stand for the availability of the forks. Back to top

Knight's Tour

CS322 Operating Systems in-class project. Developed using Sublime in C. Used recursion and backtracking to validate the possible steps and visualize the solutions to the player. Back to top