OptiRigFit project aims to build a desktop hardware configuration generator to help layman and PC building
novices to figure out the best and tailored configuration to their specific needs and budget. The goal
is to ensure that every user, regardless of their technical background, can confidently make informed decisions
and achieve optimal PC performance.
Table of Contents
- Installation & Manual
- Database Coverage
- User Stories Records
- Instructions for Grader
- Phase 4 Task 2
- Phase 4: Task 3
- Data Sources
Project Expectation & ToDoList
- Database of RAM, GPU upload ✅
- Configuration recommendation algorithm ✅
- Sort item by price or performance ✅
- console interface ✅
- GUI ✅
Installation & Manual
Java Desktop App
- Clone the repo from the GitHub: https://github.students.cs.ubc.ca/CPSC210-2023W-T1/project_h9k6r.git
- Open with Intellij
- Change to package view
- Navigate to ui package under main folder in src
- Run Main file
Database coverage (Sept 28th, 2023)
- CPU:
- Intel: 12th Core Desktop CPU & 13th Core Desktop
- AMD 7000 series Ryzen Desktop CPU
- Motherboard:
- ASUS: LGA1700 Z690 H670 B660 Z790 H770 B760
- ASUS: AM5 X670 B650 B620 on sale
- Power Supply:
- ASUS: Loki Thor
- Corsair: SF HI
- EVGA
- GPU:
- NVIDIA: 30 40 series desktop GPU
- AMD: 6000 700 series desktop GPU
- RAM:
- Purchase suggestions:
- Max motherboard ram capacity
- Number of slot on motherboard
User Story
- As a user, I want to be able to add arbitrary configurations(X) to saved list of configurations (Y)
- As a user, I want to be able to generate arbitrary recommended configurations(X)
- As a user, I want to be able to review saved configuration
- As a user, I want to be able to add optional (extra) components
- As a user, I want to be able to change necessary components
- As a user, I want to be able to customize generated configurations
- As a user, I want to be able to choose the size of computer
- As a user, I want to be able to choose the purpose of computer
- As a user, I want to be able to input budget
- As a user, when I select the quit option from the application menu, I want to be reminded to save configuration list to file and have the option to do so or not.
- As a user, when I start the application, I want to be given the option to load my configuration list from file.
Instructions for Grader
1.Generate the required action related to the user story
- You can generate the first required action related to the user story “adding multiple Xs to a Y” (user story #2, 7, 8, 9) by
“Configuration” -> “build new config” (Keyboard shortcut: Control + N) - Generate new config (user story #2, #7, #8, #9)
- go to toolbar “Configuration” -> “build new config” (Keyboard shortcut: Control + N)
- input valid max 5 digits budget (with max two decimal places)
- select prefer purpose from four button on popup window
- select prefer size from three button on popup window
- You can generate the second required action related to the user story “adding multiple Xs to a Y” (user story #1) by
clicking the “save” button on each generate config internal panel which you would like to save - Save arbitrary Xs to Y (user story #1)
- follow above procedure of generating x as arbitrary times
- click the “save” button on each generate config internal panel which you would like to save
- check whether the number of config showing up on the saving queue
- Customize your own config (user story #3)
- click the “customize” button on the config internal panel on workspace
- click the comb box of the component you would like to change
- click the “save” button to save your change to the configuration
- Check the saved configs again (user story #5, #6)
- click the number of saved configs in the saving queue you would check to check again (closed config on workspace)
- click the “show” button on the bottom of saving queue panel
- You can save the state of my application by clicking the “file” -> “load file to workspace” option on toolbar of “file”
- Save Y to the file (persistence) (user story #10)
- check the saving queue of item you would like to save
- go to the toolbar “file” -> “save list to file” (Control + S)
- You can reload the state of my application by clicking “save list to file” option on toolbar of “file”
- Load Y from the file (user story #11)
- go to the toolbar “file” -> “load file to workspace” (Control + O)
- loaded saved configurations would be sync to the saving queue
2. Visual component
- Relative dictionary: ./data/resource
- Github dictionary: https://github.students.cs.ubc.ca/CPSC210-2023W-T1/project_h9k6r/blob/dcdd99538e6691cc203fa92e40d5f332f1c63355/data/resource
Phase 4 Task 2
Fri Dec 01 10:47:48 PST 2023 configuration #1 added to queue
Fri Dec 01 10:47:48 PST 2023 The added configuration has cpu of R7-7700X,
budget for ram 4000.0,
motherboard of Asus ROG STRIX X670E-I GAMING WIFI,
gpu of Radeon RX 6950 XT
power supply of EVGA 650 N1
total price of 6597
Fri Dec 01 10:47:54 PST 2023 New Config generation start!
Fri Dec 01 10:47:54 PST 2023 Fail to find fitted cpu!
Fri Dec 01 10:48:07 PST 2023 New Config generation start!
Fri Dec 01 10:48:07 PST 2023 Fail to find fitted cpu!
Fri Dec 01 10:49:07 PST 2023 New Config generation start!
Fri Dec 01 10:49:07 PST 2023 Fitted cpu found: i5-13600K
Fri Dec 01 10:49:07 PST 2023 Fitted motherboard found: Asus ROG STRIX Z690-E GAMING WIFI
Fri Dec 01 10:49:07 PST 2023 Fitted GPU found: Radeon RX 7800 XT
Fri Dec 01 10:49:07 PST 2023 Fitted power supply found: Cooler Master XG750 Plus
Fri Dec 01 10:49:07 PST 2023 New configuration is generated successfully!
Fri Dec 01 10:49:09 PST 2023 configuration #2 added to queue
Fri Dec 01 10:49:09 PST 2023 The added configuration has cpu of i5-13600K,
budget for ram 170.0,
motherboard of Asus ROG STRIX Z690-E GAMING WIFI,
gpu of Radeon RX 7800 XT
power supply of Cooler Master XG750 Plus
total price of 1982
Phase 4: Task 3
For those classes for components, they could be refactored to reduce the redundant lists of components database class to reduce the coupling and increase the cohesion.
Extract a general abstract class of component with model name, sale price, and base power. Extract a general list of components which has filter methods to filter the compatible
component during the configuration generation. All concrete component class extends the abstract class of general components to increase cohesion. Only add unique property to concrete
component class, like socket for cpu and motherboard, size for motherboard and power supply, etc. This could improve the efficiency of algorithm for figuring out the
best fit configuration when this app was deployed on web with high demand of request.
For configuration saving queue, it could be improved by applying singleton pattern to keep only one instance in both console and Ui class. The saving queue is the only one which store
the list of configuration. It is modified only when user generate new configurations or load the list of saved configurations to the workspace. Maintain the single instance would be
helpful to reduce the coupling.
UML diagram
Data Sources
- Prices Reference: (CAD$):
- Amazon: https://amazon.ca
- Canada Computer: https://canadacomputers.com
- CPU:
- Intel: https://ark.intel.com/content/www/us/en/ark.html#@PanelLabel122139
- AMD: https://www.amd.com/en/products/specifications/processors
- Motherboard:
- ASUS: https://rog.asus.com/ca-en/motherboards-group/
- Power Supply:
- Corsair: https://www.corsair.com/us/en
- EVGA: https://www.evga.com/products/productlist.aspx?type=10
- ASUS: https://rog.asus.com/event/PSU/ASUS-Power-Supply-Units/global/index.html
- Cooler Master: https://www.coolermaster.com/catalog/power-supplies/
- GPU:
- Nvidia: https://store.nvidia.com/en-ca/geforce/store/?page=1&limit=9&locale=en-ca&category=GPU,DESKTOP
- AMD: https://shop-ca-en.amd.com/
2 responses to “OptiRigFit: Java-Driven Personalized PC Hardware Configuration Builder”
Sustain the excellent work and producing in the group!
You’ve been great to me. Thank you!