This is where you can find documentation on most of my projects, categorized by year. I hope you find them interesting, as I’ve had a lot of fun working on these. Use the sidebar table of contents for easy navigation.
—— 2020 ——
Write up coming soon.
Write up coming soon.
LC-2K Instruction-Set Assembler
Write up coming soon.
Android Workout Timer
Android Studio, Kotlin.
Write up coming soon.
—— 2019 ——
Weather Balloon Payload
This project is probably my favorite to date. The final report turned out wonderfully.
This semester-long, 5 person project went from learning the basics of electrical wiring and soldering to launching a fully operational and to-specification atmospheric weather balloon. Our group elected to include two extra sensors, the MPU-9250 Gyroscope/Accelerometer, and the BMP-280 Barometer, in hopes of simultaneously measuring acceleration and altitude. With these two sensors, we were able to deduce wind shearing forces at different altitudes throughout Earth’s atmosphere. The intended real-world application of this was to record the expected turbulence experienced by commercial airliners, and more specifically, how to avoid it. We used Altium to design a custom PCB and then had it printed to allow for a permanent board that would house our package sensors. To facilitate the use of our sensors, we created a C++ library to use them more efficiently - it won one of the class awards.
This was a fun project that started as a way to further develop my front-end skills and ended as a moderate obsession. I am pretty proud of how it turned out, it looks pretty professional given the expectations I had going into this project. It first started as a React template website, but then I started using Hugo as a static site generator. I found the themes system in Hugo to be too much of a hassle so I switched to Jekyll in hopes of remedying that (it didn't). I gave up on trying to use somebody else's theme and finally made my own. Now I have this Jekyll/HTML/CSS hybrid-Frankenstein website that uses my version of EECS485's Project Specification theme. I tailored the base of the theme to my website, but still kept the same basic design in hopes of making my project specification's easier to read.
This project was a deep dive on specific data structures, specifically the stack and queue. It uses a deque (double-ended queue), but we wrapped it such that it only had stack/queue functionality. In summary, we were given a 2D 100x100 grid of a treasure map with land, water, obstructions, and the treasure. Our task was to find the treasure coordinate and more importantly, the correct path to that coordinate depending on the search mode used (Stack vs. Queue searching strategies). This was my first project you couldn't just code in one sitting - you needed to plan and think about the correct Data Structures to use for each part of the program.
This project consisted of a user inputting a huge file of logs. Our task was to organize and index it, then allow the user to perform a handle of commands (such as print, sort, keyword search, time search, etc) to output a text file with only the logs they want. The main learning goal of this project was to understand the time complexities of different data structures and algorithms, as we had to fit all of the commands given within their relevant time allotment to pass the test.
This project was aimed to reinforce the usage of pathfinding algorithms like Djikstra, Kruskal, and Prims, as well as reinforce the usage of more advanced programming techniques like Branch and Bound, Backtracing, and Dynamic Programming. We were given coordinates in a 2d map and had to find things such as the minimum spanning tree (shortest path) between two points, the most optimal path between all points with a given heuristic (for this project, we used nearest arbitrary insertion), and a moderately optimal path in a much faster time.
—— 2018 ——
I still have fond memories of this project. It essentially served as a Euchre (a complex card game popular in Michigan) simulator that has either 2 players playing against each other, or a few flavors of AI to play against. It was my first project that was too large and complex to this about all at once. You had to break it up and use a wonderful thing called abstraction, which assumes that the other components of your program would work correctly (spoiler: they didn't). This was probably one of my most memorable projects, as my partner and I stayed up to coding until around 5 am to finish the project early for an upcoming busy week. It had countless edge cases that you had to account for and was my first introduction to more advanced debugging tools.
Content-Aware Image Resizing
This was a tool that essentially parsed individual pixels of an image and calculated the contrast between its surrounding pixels. Depending on the input you give the program (output length/width, crop/resize), it uses the contrast between sections of the image to decide where we can afford to resize an image without distorting its significant parts too much. The idea behind this project was to essentially find unimportant areas in the image that we can use to resize the image in hopes of changing the contents of the image as little as possible from the perspective of the viewer.
Piazza Post Classifier
The Piazza Post Classifier took in a large number of forum posts from Piazza and used machine learning/natural language processing with a dataset of prelabeled Piazza posts to generate connections between common keywords and their labels. Furthur posts can be entered into the program which then returns its prediction on the suggested topic the classifier thinks the post is from. I enjoyed this project as it was my first introduction to big data and using machine learning techniques to process and use that data. It was a neat project that had a satisfying result.
Reverse Polish Notation Calculator
The idea behind the Reverse Polish Notation (RPN) Calculator is that it takes the arguments first, and then the operations that will be performed between them. Modern calculators do that in reverse - for example, 1+2-3 would be 1,2+3- in the RPN calculator. This project was meant to demonstrate and teach the stack data structure, which we also made by creating a wrapper on the C++ vector library.
This program essentially simulated a shuttle landing with given system parameters including initial velocity, air braking coefficient, braking distance, and a few others. It would then return the most optimal braking coefficient - one that would use up as much of the runway as possible to reduce passenger discomfort, but also still result in a safe landing. The purpose of this project was essentially to get a grasp on using a program to help solve complex math and physics problems - it worked pretty well.
—— 2017 ——
RPS-101 is essentially Rock Paper Scissors Spock Lizard on steroids, with 101 different gestures to be exact. Each gesture beat 50 other gestures, as well as lost to the remaining 50. It had 5050 different outcomes and just under a one percent chance of a tie. This was probably my favorite game I've coded so far, just because of how convoluted it is. You can find other versions too, such as RPS-15 and RPS-25. I made those first and that's how I found out about RPS-101. The funny thing is, I technically don't even know if it is bug-free because I never tested all 5050 outcomes.
In my opinion, Blackjack was the best project I made during my time in high school. It featured an ASCII-based GUI (because regular GUI would've made too much sense?) printed in your choice of Java CLI and allowed you to play a fully fleshed out Blackjack game with a predictable dealer. If I remember correctly, I programmed the dealer to always take a card if it was 16 or less and stand otherwise. In theory, it is a pretty simple game to code but I still have fond memories of it. I was super proud of my ASCII GUI since I had no idea how to make a proper GUI at the time.
Robocode is a simple to use, educational Java framework that allows you to create autonomous robots. They would be put in a gladiator-esque arena and fight against other robots to death. There are many techniques that were ready to be implemented depending on your dedication - stuff like priority selection of enemy robots, leading targets for more accurate shots, and randomized movement depending on if another robot is aiming at you. You could make your robot have some personality as well - I know a few people who made their robot drive in circles, and then when one person got close enough it chased them down with melee attacks until they were dead. It was a pretty cool project that was my first introduction in using other people's libraries and frameworks in your code.
Prime Number Calculator
This was a neat little project I did in high school that would essentially generate a list of prime numbers smaller than N, with N being the only argument required by the program. Obviously, given that I did not run this on a multi-million dollar supercomputer and only had moderate knowledge of programming/math, it was far more rudimentary than you think. I really only tested it up to 100 because that was all the project specification required. Despite it running on lots of spaghetti code, it still compiled and returned the numbers pretty fast.
—— 2016 ——
FC Barcelona Fanclub
When I first looked back at my old website to add it to this portfolio, the first thing I thought was "I remember this looking better". It was my first introduction to anything relevant to programming (if you consider HTML a programming language). I made it watching some YouTube tutorials when I was first learning to code. It's not anything fancy (quite the opposite, actually), but it got the job done. It uses a simple container-based styling and I remember being pretty happy with it when I finished. Who knows why FC Barcelona hasn't given me a contract yet?
This documentation uses my version of Primer Spec, a Jekyll theme created by the UM’s EECS485 staff. It was designed specifically for long project documentation and is based on the original Github Primer theme. My website landing page, pedroz.dev, runs on a heavily edited version of HTML5UP’s Photon theme.
Thanks for reading through my work. Feel free to contact me if you have any questions.