Pedro Zamora II

Project Documentation


pedroz.dev

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.

Happy reading,

-Pedro

—— 2020 ——

Cryptography Analysis

Python.

Write up coming soon.

Fakebook Database

SQL.

Write up coming soon.

LC-2K Instruction-Set Assembler

C.

Write up coming soon.

Android Workout Timer

Android Studio, Kotlin.

Write up coming soon.

—— 2019 ——

Weather Balloon Payload

Arduino, C++.

alt text
Our payload post-flight, "TMP 36".
1 / 4
alt text
The GPS recorded path of our payload.
2 / 4
alt text
Our bare PCB.
3 / 4
alt text
"The Team. The Team. The Team."
4 / 4

View Final Report
View Poster
View Github

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.

Smart Mirror

JavaScript, Electron.

alt text
Here is the front end of my smart mirror.
1 / 2
alt text
Backend wiring.
2 / 2

MagicMirror
View Github

I started this project as a direct answer to one of my daily problems, and it turned out pretty well. I did a few weeks of research (mostly Youtube Tutorials) and decided to start in the summer, right before school started. For me, the hardest part was creating a frame that would fit the mirror since I had no previous experience with woodworking. After that, I was able to connect everything up a set up a Raspberry PI server that I could remote into and install the Magic Mirror framework. I spent about a month configuring this huge JavaScript library, even using some third-party code (specifically for the calendar), and tried to get everything to my liking. I am pretty proud of the result. I can finally see the weather, date, and whatever I have to do that day in the mirror!

Personal Website

HTML/CSS, JavaScript, Jekyll, Ruby.

Website

pedroz.dev
View Github

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.

Treasure Hunt

C++.

Treasure Hunt

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.

Log Manager

C++.

Log Manager

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.

Path Finder

C++.

Path Finder

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 ——

Euchre

C++.

Euchre

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

C++.

Content Resize

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

C++.

Piazza 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

C++.

Reverse Polish Notation

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.

Braking Coefficient

C++.

shuttle

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

Java.

RPS-101

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.

Blackjack

Java.

Blackjack

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 Robot

Java.

Robocode

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

Java.

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

HTML/CSS.

My First Website

My First Website

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?


Acknowledgements

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.