About Me person
Michael Grimsley is a 26-year-old Filipino-American from San Diego, California. I received my Bachelor's Degree in Computer Science from San Diego State University in 2022 and have continued to strengthen my skill set through building various personal projects. I am an aspiring Software Developer with a strong academic background in computer science and hands-on experience in software development. I am detail-oriented, passionate, and I possess a continuous desire to learn and adapt to new challenges while demonstrating strong problem-solving skills. I am actively seeking a role where I can continue to grow and make meaningful contributions.
My Tech Stack
Programming Languages
Software or website development using Python, JavaScript, Java, or C.
Front-end
User interface development with React/React Native.
Responsive layout design and styling using Bootstrap or Materialize.
Back-end
Website or web application development with Django.
User authentication and database management using Firebase or Supabase.
Developer Tools
Containerization with Docker.
Interface design and prototyping with Figma.
Asset bundling with Webpack.
Video game development using Unity and C#.
Projects terminal

Django and Postgres full-stack web application with responsive Bootstrap UI.
BalancedBudget is a finance management web application developed with Django using a Postgres database. The website allows authenticated users to track and plan their finances, utilizing a responsive UI designed with Bootstrap that displays user spending habits and progress through various charts and graphs. Users are able to enter, edit, and delete payments, set monthly budgets for different expense categories, and visualize their finances with ease.

Single-page React application, integrating external API's to fetch and process data.
Forecaster is a single-page weather application developed with React that displays real-time weather information for a given location. Weather data for the next seven days is displayed, and a specific day can be highlighted to view additional information. Switches are also included to change between metric and imperial units. Upon loading the page, the browser will ask the user for permission to access their location using the browser's Geolocation API. A default location is set if permission is denied. BigDataCloud's Reverse Geocoding API converts the given latitude and longitude coordinates into a human-readable city name. Weather data of the location is then obtained through Open-Meteo's Weather API.

Python-based Deep Q-Learning agent trained to play Snake autonomously.
Q-Learning is a model-free reinforcement learning algorithm that learns an optimal action-value function, or Q-function, which tells how good it is to take a certain action in a certain situation. Deep learning helps Q-Learning handle larger and harder tasks by using a neural network.
- Hyperparamaters are external configuration variables that define the training process of the deep learning model.
- Learning Rate (α): how much the model should change with each training step
- Discount Factor (γ): how much the agent values future vs immediate rewards
- Exploration Rate (ϵ): probability the agent will take a random action instead of the best-known action
The Epsilon-Greedy policy is a simple decision-making strategy that balances exploration and exploitation. Exploitation involves choosing the action that is believed to yield the highest reward while exploration involves selecting a random action to discover potentially better options. The parameter epsilon controls this balance, beginning training with a high exploration rate that slowly decays to a minimum after each iteration.
To stabilize training, past experiences are stored in a replay buffer. Instead of training on only the most recent experience, the agent randomly samples a batch of experiences from the buffer. This allows the agent to learn from the same experiences multiple times, reducing the correlation between consecutive experiences.
The Q-values and target Q-values are then calculated. A loss function measures the difference between these values and the network is updated based on the gradients of the loss.

Horror-themed Pac-Man recreated in first-person using Unity and C#.
Just like the original game, there are pellets scattered across the level that the player must gather to win. There are 4 ghosts that navigate the maze and are constantly alternating between chasing the player and scattering to their respective corners of the map. Each ghost also has a unique targeting system when they are in chase mode.
- Blinky (Red): The player's position
- Pinky (Pink): 4 tiles in front of the player's position
- Inky (Cyan): The end of the vector from Blinky's position to the player's position times 2
- Clyde (Orange): The player's position if they are farther than 8 tiles away, the bottom-left corner of the map otherwise
The game officially begins when the first pellet is obtained. Blinky enters the maze first, and the rest become active as the player progresses the level. There are also 4 power pellets, one near each corner of the map, that will briefly frighten the ghosts and allow them to be eaten by the player. If a ghost is eaten, they are sent back to their home area and are temporarily inactive. Otherwise, if the player is eaten by a ghost, the player respawns at the starting point and loses a life. If all 3 lives are lost, the game is over.

Python-based customizable graph search visualizer, implementing DFS, BFS, GBFS, and A* graph traversal and pathfinding algorithms.
Two lists, an open list and a closed list, are used to prevent the algorithm from checking a tile more than once and to allow backtracking if needed. Nodes in the closed list represent tiles that have been visited, while nodes in the open list represent tiles that are available to be visited. Initially, the open list contains just the start node.
The algorithm begins by checking if the open list is empty. An empty open list means that all available tiles have been checked and a path from the start tile to the end tile does not exist. Otherwise, set the current node to the next node in the open list and move it to the closed list. If the current node is the end node, a path has been found and the algorithm exits. Each node keeps track of their parent node, allowing the path to be reconstructed. If the current node is not the end node, generate all available neighbors and add them to the open list. This process repeats until all nodes have been checked or a path to the end node has been found.
All four of the implemented algorithms function in this way, only differing by how they select the next node from the open list. Breadth-First Search uses the first-in, first-out (FIFO) method, and Depth-First Search uses the last-in, first-out (LIFO) method. Greedy Best-First Search explores the tile that is closest to the end. The estimated path cost from a given node to the end node, also known as the node's h-cost, is calculated for each node when they are created, and the open list is sorted by shortest h-cost. A* utilizes each node's h-cost, but also takes into account each node's g-cost. This is the exact path cost from a given node to the start node. A node's f-cost is the sum of a its g-cost and h-cost, and A* chooses the next node with the lowest f-cost.
Hobbies celebration
Music
I love music and am almost always listening to music from various genres. I first started learning how to play the guitar and piano around the age of 10. I learned how to play the trombone in my middle school's concert band, and I continued to play it in my high school's concert band, marching band, and jazz band. I also played the violin in my high school's orchestra for 2 years. After graduating high school, I then played the baritone for the Gold Drum and Bugle Corps for 2 seasons. I have developed a strong appreciation for music and enjoy attending concerts and festivals with my friends.

KASA Ignite (@kasa_ignitedance)
Ignite is the Korean American Student Association's open kpop dance team at San Diego State University. During the school year, they host weekly kpop dance cover workshops. Ignite also occasionally performs kpop dance covers and medleys at various events within San Diego County. I first saw Ignite perform at SDSU during the Asian Pacific Student Alliance's 8th Annual Night Market in 2021. I began attending their workshops the following semester, where I made a lot of new friends and performed with them at various events.


Video Games
I have been playing video games for as long as I can remember. I have also met many of my friends through this shared hobby. Almost everyday, I can get in a discord call with them and play games with them while we catch up or just have a good time. From casual single-player and cooperative games to competitive online strategy games, I spend a lot of my free time playing, watching, and studying video games. Some of my more memorable video game achievements are listed below.
Teamfight Tactics
TFT is a competitive online auto battler released by Riot Games in 2019. It is a seasonal strategy game where 8 players compete against each other by forming and managing a team using limited, randomly generated resources. I started playing TFT in 2020 during Set 3.5: Galaxies and achieved the rank of Master in my first season. In Set 6: Gizmos & Gadgets, I achieved my highest rank ever of Grandmaster with 648 League Points (LP), placing myself among the top 500 players in North America.

World of Warcraft
WoW is a massively multiplayer online role-playing video game released by Blizzard in November, 2004. In this game, I participate in Cutting Edge mythic raiding, a high-level team-based achievement that is only earned by a small percentage of players. This involves months of preparation, iteration, and optimization within a 20 or more person team. Beginning my mythic raiding journey in January, 2024 with a rank 3500 guild, I have climbed the ranks and proven myself in a top 200 worldwide guild.



Get in Touch smartphone
I'm always excited to connect with other developers, collaborate on new projects, or explore career opportunities. If you'd like to chat about my work, have a project in mind, or just want to say hello, feel free to reach out!