In Computer Science, we learn the fundamentals of object oriented programming (Java) and web design techniques (HTML & CSS) through projects such as building this website and developing an assistive app in the Apps for Good project. All students compete in numerous CS competitions throughout the year, with the opportunity to participate in more, such as Cyber Patriot, as an extracurricular. Additionally, there is the opportunity for advanced students to complete a self guided CS project to strengthen the skills that are most important to them.
Apps For Good is a charity that gives high school students around the world the world the opportunity to lead their own work on a subject that can make a difference in their community. In this project, I worked with Nicholas Giza and Kayla Vallecillo. We created an app, shovelSmart, that helps users to optimize their winter snow removal by suggesting an optimal, and second optimal time to start shoveling before. Below, find a description of our project and the poster we presented at the Apps for Good Fair.
Executive Summary
For
residents of the northern United States, snow shoveling is an annual
reality. To many, shoveling is simply a time-consuming chore in need
of completion; to others, it is an impossible task. More
specifically, members of the elderly population may find that
shoveling is too physically burdensome when the snow becomes too deep
or saturated. One major component contributing to these attributes is
the tendency for individuals to procrastinate shoveling.
Unfortunately, waiting to begin shoveling only gives more time for
additional snow to accumulate and temperatures/humidities to change
significantly, both making the snow denser and thus harder to move.
The aim of shovelSmart is to predict and suggest the optimal times
for users to go outside and shovel with maximum efficiency. Using
information provided by both the user, a weather API, and a
mathematical model, shovelSmart can approximate the point in time
when clearing fallen snow will become too burdensome for a user,
allowing for the user to shovel before this. Should users know
exactly when to go out and shovel, the task of shoveling may become
significantly more feasible for audiences of all physical abilities.
Target Audience
The target
audience of shovelSmart is anyone who finds shoveling snow difficult
or time-consuming. Primarily, this app will benefit elderly
individuals who, as a result of the aging process, may not possess
the strength required to shovel. Beyond the elderly, this app can
benefit the average homeowner as well, ensuring that homeowners can
shovel at the most optimal times to consume the least time and
energy. With such a broad audience, shovelSmart aims to help people
of all abilities shovel more intelligently.
MVP
In order to be
successful in its mission, shovelSmart presents several useful
features to its users. Firstly, shovelSmart takes in environmental
data including temperatures, humidity, and precipitation history and
forecasts, to give an approximation of snow weight. Using data (house
location via zipcode or coordinates, preferred shoveling depth, and
shoveling time estimate) collected by a form completed by the user
and the mathematical model, the app estimates the shoveling duration
based on the weight of the snow. Then, the app alerts users when the
best time is for them to begin shoveling their driveway or other
property features at the press of a button. In order to better suit
those responsible for shoveling multiple properties, shovelSmart has
the ability to manage several homes in various locations.
The Model
ShovelSmart’s
novel mathematical model uses past, present, and future weather data,
as well as information specific to the user, such as their average
shoveling time during various conditions, to calculate the optimal
and second optimal time to begin shoveling. This is achieved by
calculating the weight of snow on the ground and comparing that to
how much the user is comfortable removing in one round of shoveling.
During the next winter season, the team hopes to test the accuracy of
their model and fine-tune it based on feedback from their community.
Unable to display the PDF file? Download the poster instead.
In Advanced CS, I am currently working on an independent app building
project. The app I am building aims to help indecisive friend groups
make fair and objective decisions. It does this by allowing users to
share their preferences anonymously, then vote on the solutions that
work best for them. For the truly indecisive, there is also a feature
that makes the decision randomly. When the app is complete, it will
allow users to connect over multiple devices.
Similar
to my STEM 1 app, Carbon Crush, I am programming in Dart using the
Flutter framework.
The images shown below are v1
screens for my app. You can see a text field to enter the decision
title and drop down menus to select the type of decision (random,
simple, complex) and number of member. The screens then guide you
through the process. For this first version, a single device would be
passed between individuals so they could record their responses.
For me, there was a long learning curve when it came to
understanding the ins and outs of Dart. However, now that I feel more
proficient in the language, I anticipate that the speed of the
developement will increase rapidly.
In A Term, before beginning my independent project, I completed a
series of 10 challenge programming problems. One that I enjoyed
especially was #4: Largest Palindrome Product. For this problem. I had
to code a method that would determine the largest palindrome that
could be made by multiplying three digit numbers. To approach this
problem, I wrote two methods. The first method multiplied every
combination of numbers up to the specified values. This method called
the second method which checked if the product was a palindrome. If it
was a palindrome, then it would save that value as the maximum
palindrome. Once the muliplying loop finished the current maximum
palindrome was returned!
If you’re curious, the
answer is 906609!
Unable to display PDF file? Download the code instead.