Java

Here, you can find all of my Java family projects (continually updated with new and/or tuned projects)

Genius

Genius was my introduction to full stack web development and forced me to apply all of my previous knowledge to a real world project. Using Next.js 13, React, Tailwind, Prisma, Stripe, and other services, I built an ecommerce SaaS website around 5 AI products. I used Next.js to build the frontend and backend of the website which connected OpenAI's API to submit prompts by the user to generate a conversation, music samples, images, videos, or code snippets. I used Prisma as the database storage for user data (API call limit, free or premium). Clerk is the authorization service to manage user access and accounts. Clerk's SDK allows for sign in with Google, email, or another service that I want to add from their website. Crisp makes customer service chatting easy and is integrated into Genius. Stripe made it easy to implement a payment system for the products. It is hosted

Simple Aged Cache

Simple Aged Cache is an assignment in my masters program that implements and tests a simple aged cache in both Java and Kotlin. I initialized the paramters clock, size, and cache. Then I moved on to both SimpleAgedCache constructors (one initialized with a specificied clock and the other with a default clock), and helper functions put(), isEmpty(), and size(). Next I worked on the ExpirableEntry class by initializing the parameters key, value, and expirationTime, initializing th constructor, and working on helper function isExpired(). getKey() and getValue() were given. The implementation for Kotlin was essentially the same process. I used gradle to build the project and JUnit to test the project.

Simple Blockchain

Simple Blockchain is an assignment in my masters program that implements a simple blockchain in Java. I revised the block class by working on the calculatedHash() function and then adding that value to the hash variable. Then I worked on the blockchain class. I first declared a linked list of blocks and then worked on the isEmpty(), add(), and size() helper functions before moving onto the isValid() function. Here is where I actually implemented the blockchain by checkinging for an empty chain, checking for a chain of one, then a chain of many. I iterated through the each block to compare the current and previous hash values. The supporting functions were given. I used gradle to build the project and JUnit to test the project.

Email Verifier

The Email Verifier was a project that conveys how a messaging queue works. This simulates someone registering their email and getting a verification code with that email. Most of the code was prebuilt and there were 4 servers we set up to run our tests. The initial instructions are on the README to run through the set up. I built test.js using k6. I made the test last 30s and simulated 10 users. I then used res to create a POST request and used res to assert a 204 response. I was also tasked with running, testing, and improving benchmarks in benchmark.kt within the applications folder. I intentionally made a test of registrations per second that would fail to see a response. I also implemented a consistent hash exchange in the registration server.

The Milk Problem

The Milk Problem demonstrates a common error with streaming data where one client receives the same request as another client. In the literal example, multiple grocery stores order milk and all receive the same number (131). This project represent managing product inventory and highlights the use of database transactions. Before following the README instructions, I filled in TODOs. First, I implemented a decrementBy function in ProdcutService.kt and then moved to App.kt and replaced the update function with decrementBy to improve accuracy. After completing these, the database was created and working on the server.

Provenance

Provenance is a common architecture used for data collection. Provenance collects and stores articles from infoq.com and follows a Netflix Conductor-esque architecture. There were two main classes to work on in this project: ArticlesController and Endpoints. In the ArticlesController section, I worked on the handle function to retrieve all articles using a predefined findAll() function and then retrieve only available articles using a findAvailable() function. I then used the predefined writeJSONBody to convert articles to json. In the Endpoints section, I mapped rss results to an article collection and saved the articles to the article gateway with the execute() function. Used a predefined XmlMapper to convert RSS feeds to java objects. After completing both of those sections, I scheduled work in the App class start() function, using previously defined classes and functions. To test and build, I used the given gradle commands and JUnit to test the files.

Provenance Metrics

The goal of this project is to look at service level indicators within Provenance codebase. First, I created a Prometheus job to store the metrics data. Next, I made a data source for Prometheus using Grafana. Last, I created a Grafana dashboard to query, visualize, and alert on metrics from multiple sources — in this case, the Prometheus data source.