Preston Chapman Profile Picture

Preston Chapman

University of Advancing Technology Logo

Advancing Computer Science Objectives

  1. Document the software development process to analyze a problem and to design, build, and test software solutions.
  2. Demonstrate software development skills using more than one programming language and development environment.
  3. Implement data-driven solutions.
  4. Design and implement software solutions for multiple platforms including mobile devices.
  5. Design, develop, and maintain object-oriented software solutions utilizing inheritance, encapsulation, polymorphism, and abstraction.
  6. Within software solutions, describe, implement, and analyze data structure techniques.

Document the software development process to analyze a problem and to design, build, and test software solutions.

Objective 1

Document the process of creating a software solutions. This includes reports or documentation, release or building notes, testing plans, and other resources that show an understanding of the full development process.

Foobar Controller Mobile

This is a mobile app for the existing software Foobar2000, that will allow you to control your desktop music player, remotely using your phone, tablet, or other smart device. The goal is to provide a great user interface (UI) and user experience (UX), while still maintaining the abundant number of features that foobar2000 offers. The features would include Playlist, Library, Playback Queue, Album Art, LocalLibrary, Lightweight, Customizable, and more. Although foobar2000 is a great freeware application, it is on the older side, but it still has updates to this date, it is also highly customizable with skins and plugins. The goal is to use an open-sourced plugin called “Beefweb”which allows for communication over HTTP to control Foobar2000remotely. I will not be creating the music player (Foobar2000) or theAPI (Beefweb), I will be creating a mobile app that uses Beefweb to control Foobar, while having an easy-to-use UI.

This project also has over 151 commits, and 7 releases. Each release is well documented with changes and additions, to both the front end and back end. In addition to this there is also a Wiki for the project, this includes information about the application, version support, FAQ, Setup, and Usage Instructions. You can visit the Wik here: Foobar Controller Mobile Wiki

Now Playing

Previous

Please enable JS for this element to work

Next

Checkers | CSC256

This project is JavaScript based, the checkers board will be generated using JS, and the colors for each piece can be changed for both players. This website will check if the move is valid, and will also allow for promotion, indicated by a yellow outline.

This game will allow players to take other pieces, change their team color, have player names, and have a win screen. However it will not handle player turns, so any player can move at any time.

This website had multiple releases, which allowed for it to improve over time, this project also heavily used Git, with over 50 commits, allowing for version history and progress tracking.

Previous

Please enable JS for this element to work

Next

Demonstrate software development skills using more than one programming language and development environment.

Objective 2

Demonstrate proficiency in multiple programming languages and development environments. This can include using different languages for different parts of the project, or showing how the project was developed in different IDEs or toolchains.

Projects

I have worked on many different projects in a multitude of different languages, ranging from web development, desktop applications, mobile apps, CLI, and GUI platforms. All of my projects are stored on my GitHub. As of november 2025 I have made around 1.5k commits, to a total of 68 public repositories.

Languages

When it comes to the different languages I have worked on, the one I am the most proficient in would be TypeScript, JavaScript, Python, and Java in that order. I am very quick to understanding a new language, and I have some experience with PHP, C++, and C#. Bellow you can find some of my most common language, as well as the projects that used that language.

Development Environments

The main IDE that I use will be Visual Studio Code, this is my go to when it comes to projects in JS, TS, Python and sometimes Java. I have also worked in other environments such as Visual Studio, IntelliJ IDEA, and Arduino IDE. I have also worked in different frameworks such as React, React Native, Expo, Electron, in addition to things like Linux, WSL, Android Debug Bridge, and Power Automate.

Implement data-driven solutions.

Objective 3

Create projects that rely on data to function, this can be through reading/writing files, databases, or APIs, where the data is either stored in a separate file, or remotely. This data can be static or dynamic.

RPG Simulator | CSC263

Java Programming II

This project is a standard Role Playing Game (RPG) simulator. The user will be able to choose their name, color, and difficulty, then they will fight a variety of enemies. The more waves you complete the higher your score will be. All scores are added to a local database, allowing you to see your ranking.

This project uses SQLite 3 to store the high-score data. This allows for a large amount of data to be stored, and quickly retrieved by using a local SQL based Database.

Register Screen

The user is able to register an account to save their progress to the SQL Database, the use can choose a name, difficulty, and color

Previous

Please enable JS for this element to work

Next

Clocking Manager | CSC230

Internet of Things

In this project we were tasked with creating an application of our choice for the M5StickC plus, I decided to create a clocking application that will track when I clock in and out of tutoring. The M5Stick is a small ESP32 device that uses C++ and the arduino framework, this allows for many different libraries, and functionality, along with its on board interfaces such as buttons, LCD display, and connections!

By taking advantage of Webhooks with Microsoft Power Automate we are able to send and retrieve information from Microsoft Lists. With the M5Stick we can use the real time clock and webhooks to keep track of the clock in and out times.

M5Stick Device

This is an image that shows the GUI on the M5Stick C Plus, it will show the HTTP Mode, the Last Clock in time, the ID , and the current time. The user can clock in/out using the button on the device.

Previous

Please enable JS for this element to work

Next

Design and implement software solutions for multiple platforms including mobile devices.

Objective 4

Create projects that can run on multiple platforms, this can include mobile, web, desktop, or other environments. The project should demonstrate an understanding of the constraints and features of each platform.

PDS300/400 | I AM the DJ

I AM the DJ is a mobile app for android where users will sign in and look for a DJ event, once they choose an event they can then request a song to play, look at the song history. There are two sides to this application: the Android mobile app, and then the DJ software for Windows.

Preston was the Code Lead for this application, where they worked on the Android app, managing the GitHub and Trello, assisted with the Cloud Computing, Transferring, and Server-Side logic.

Please note that as of right now the project is no longer available on the Google Play Store.

Foobar Controller Mobile

This is a mobile app for the existing software Foobar2000, that will allow you to control your desktop music player, remotely using your phone, tablet, or other smart device. The goal is to provide a great user interface (UI) and user experience (UX), while still maintaining the abundant number of features that foobar2000 offers. The features would include Playlist, Library, Playback Queue, Album Art, LocalLibrary, Lightweight, Customizable, and more. Although foobar2000 is a great freeware application, it is on the older side, but it still has updates to this date, it is also highly customizable with skins and plugins. The goal is to use an open-sourced plugin called “Beefweb”which allows for communication over HTTP to control Foobar2000remotely. I will not be creating the music player (Foobar2000) or theAPI (Beefweb), I will be creating a mobile app that uses Beefweb to control Foobar, while having an easy-to-use UI.

This application is made for Android Mobile devices, using the framework of React Native, as mentioned above, this application is meant to be a bridge between the computer running Foobar2000, to the users mobile device. Due to this being in React Native, it can be built to iOS, or even a fully web interface, however the application is not set up to do so at the moment.

Now Playing

Previous

Please enable JS for this element to work

Next

Design, develop, and maintain object-oriented software solutions utilizing inheritance, encapsulation, polymorphism, and abstraction.

Objective 5

Create projects that utilize object-oriented programming principles (OOP), showing not just how the solution uses OOP, but how it was designed with OOP in mind.

RPG Simulator | CSC263

This project is a standard Role Playing Game (RPG) simulator. The user will be able to choose their name, color, and difficulty, then they will fight a variety of enemies. The more waves you complete the higher your score will be. All scores are added to a local database, allowing you to see your ranking.

Object Oriented Programming (OOP) principles were used throughout this project, ranging from Abstract Character classes, interfaces for formatting and gradients, and custom Panels and Frames from Java Swing.

Register Screen

The user is able to register an account to save their progress to the SQL Database, the use can choose a name, difficulty, and color

Previous

Please enable JS for this element to work

Next

Foobar Controller Mobile

This is a mobile app for the existing software Foobar2000, that will allow you to control your desktop music player, remotely using your phone, tablet, or other smart device. The goal is to provide a great user interface (UI) and user experience (UX), while still maintaining the abundant number of features that foobar2000 offers. The features would include Playlist, Library, Playback Queue, Album Art, LocalLibrary, Lightweight, Customizable, and more. Although foobar2000 is a great freeware application, it is on the older side, but it still has updates to this date, it is also highly customizable with skins and plugins. The goal is to use an open-sourced plugin called “Beefweb”which allows for communication over HTTP to control Foobar2000remotely. I will not be creating the music player (Foobar2000) or theAPI (Beefweb), I will be creating a mobile app that uses Beefweb to control Foobar, while having an easy-to-use UI.

When working on this project I wanted to use TypeScript because I want to focus on having Type Safety, OOP, and Optimization. Within this project there are over 15 different class files, some of them with multiple classes within them. Some examples of OOP would be: Inheritance with Settings, Encapsulation with BeefWeb, Polymorphism with Listeners, and Abstraction with Themes

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 export type EventHandler<T = unknown> = (data: T) => void; export default class Listener<E extends Record<string, unknown>> { protected listeners: { [K in keyof E]?: Array<EventHandler<E[K]>>; } = {}; public addEventListener<K extends keyof E>( event: K, handler: EventHandler<E[K]>, ): void { if (!this.listeners[event]) { this.listeners[event] = []; } this.listeners[event]!.push(handler); } public removeEventListener<K extends keyof E>( event: K, handler: EventHandler<E[K]>, ): void { const list = this.listeners[event]; if (!list) return; const updated = list.filter((h): h is EventHandler<E[K]> => h !== handler); if (updated.length === 0) { delete this.listeners[event]; } else { this.listeners[event] = updated as (typeof this.listeners)[typeof event]; } } protected dispatchEvent<K extends keyof E>(event: K, data: E[K]): void { if (!this.listeners[event]) return; this.listeners[event]!.forEach((handler) => handler(data)); } }

main/src/classes/Listener.ts

Within software solutions, describe, implement, and analyze data structure techniques.

Objective 6

Create projects that utilize various data structures (such as arrays, linked lists, trees, graphs, hash tables, etc.) and demonstrate an understanding of their implementation and use cases within the software solution.

RPG Shop | CSC235

This command line application is a rough representation of a RPG store, allowing users to buy, sell, and view their inventory. The player starts with $500, and can buy 3 different items, those being a Shovel, Rope and Sword, all having their own price. Although not needed for this project, I also decided to create custom functions that will allowed for colored printing of text, taking advantage of ANSI color codes.

Buying Item

Previous

Please enable JS for this element to work

Next

Timing Game | CSC235

This project stores user data in an SQLite database, by using PyGame it display a user interface to allow users to compete with others to see who can wait the longest. Arrays are used in multiple locations, allowing for storing different valid keys, the results from the database such as the users or scores, as well as multiple for loops to mange this data.

Starting Screen

Previous

Please enable JS for this element to work

Next

CSC265 Java: Sorting, Sets, Queues, Binary Tree and Java Collections

All 5 of these projects demonstrate different ways to deal with data, different ways to modify, store and retrieve the data. In this case the data is stored statically within the code.

Sorting - GitHub

In this project code was not specifically required, however I decided to go ahead and create the code for a 4 different sorting algorithms, those being; Selection Sort, Insertion Sort, Merge Sort, and Quick Sort, also known as Smart Sort

Sets - GitHub

This project demonstrations understanding for creating and manipulating sets, allowing the users to create a set, check if a value is in the set, remove a value from the set, and converting an array to a set.

Queues - GitHub

This assignment did not require any code, however I decided to practice by creating code for it. This project uses OOP to be able to create a Stack and a Queue that builds on top of a LinkedList, the classes are also generic to allow for multiple datatypes. The application will first create a integer stack, and adding and removing items. THen it will do the same with the Queue stack. Lastly it will ask the user if they want to do their own list, letting them choose if its a stack or queue.

Binary Tree - GitHub

This assignment did not require any code, however it was created to demonstrate my skills with Binary Trees. In this project I created a node class, and a Binary Search Treen class, this allows for recursions in a tree format.

Java Collections - GitHub

This project shows the usage of stacks, queue, HasTables, and ArrayLits using the built-in Java Collections.