Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ replay_pid*
.DS_Store

# Render files
*.pdf
*tmp.html

# Folders that will not be committed to the repo, even if private
Expand Down
36 changes: 36 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,42 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Calendar Versioning](https://calver.org/) of
the following form: YYYY.0M.0D.

## 2025.12.09

### Added

- Designed test suite for Neuron component
- Designed two different use cases for Neuron component

### Updated

- Edited folder hierarchy to make more sense

## 2025.11.23

### Added

- Created the kernel implementation for the Artifical Neuron component

## 2025.11.11

### Added

- Designed kernel and enhanced interfaces for the Artifical Neuron component
- Created an abstract class for Neuron (NeuronSecondary), implementing both common and secondary methods

### Updated

- Changed design to include queues representing each set of weights and inputs
- Fixed naming of interfaces to better match the convention
- Changed some data types within methods in order to better execute the component's function

## 2025.10.17

### Added

- Designed a proof of concept for an Artificial Neuron component

## 2025.09.21

### Added
Expand Down
89 changes: 4 additions & 85 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,90 +1,9 @@
# Portfolio Project
## Artificial Neuron Component

The purpose of this repo is to provide a framework for creating your own
component in the software sequence discipline. If you were unsure whether
or not to make your own, consider the following testimonial:
This component was created following the OSU Software Sequence discipline, as a part of Software 2 (CSE 2231).

> I really enjoyed the portfolio project! It gave me a stronger understanding
> of the OSU software discipline while also giving me the flexibility to
> design something that reflected my interests. This made the experience
> rewarding and enjoyable as I created a product I was proud of!
The Artificial Neuron has roots in early machine learning, where computer scientists created simple "perceptrons" that could output either true/false values according to a statistical formula. When hundreds, or millions, or billions of these perceptrons were put together, machines could recognize patterns and even predict changes.

## Recommended Steps to Get Started
This component takes on this early machine learning concept, modeling the functionality of a perceptron by outputting a true/false value depending on the result of a formula. The formula used is a sigmoid activation function, which is one of the simplest statistical models used in machine learning.

When starting your portfolio project, the following steps should make your life
a bit easier.

### Step 1: Create a Repo From This Template

<!-- TODO: use GitHub to create a repo from this template -->

Assuming you're reading this README from GitHub, you can make use of this
repo by clicking the `Use this template` button in the top-right corner of
this page. If you can't find the button, [this link][use-this-template]
should work as well. Personally, I would recommend using the
`Create a new repository` option, which will allow you to name the
repository after your component. Given that you will be submitting pull
requests to me through Carmen, you'll want to make sure your repository
is public. Then, you can click `Create repository`. After that, you can
go through all the usual steps of cloning a repository on your system to
get to work. I use GitHub Desktop to clone projects, and it has a nice
feature of letting you open a repo directly in VSCode from the
`Repository` menu.

### Step 2: Install Recommended Plugins

<!-- TODO: install recommended plugins and delete this comment -->

When you open VSCode with this project, you should get a notification in the
bottom right corner that there are some recommended extensions to install.
Click install all. If you ignored this message or it never came up, feel free
to press CTRL+SHIFT+P and type "Show Recommended Extensions". Install all of the
extensions listed.

### Step 3: Install the Latest JDK

<!-- TODO: install latest JDK and delete this comment -->

If you do not have an available JDK on your system, you may be prompted to
install one by VSCode. The default seems to be Red Hat's OpenJDK, which seems to
require you to register for an account or to install on the command line.
Regardless, there is no mac support. As a result, I would just recommend
installing the latest JDK [directly from Oracle's site][jdk-downloads].

### Step 4: Add Key Libraries to Project

<!-- TODO: add key libraries to project and delete this comment -->

As you are probably all aware at this point, you need the components jar to get
anything running. My advice is to [download it from here][components-jar]. Then,
drop it into the `lib` folder in the project. Git automatically ignores anything
you put here by default, so don't worry about committing it to version control.

Similarly, you will need the testing APIs (e.g., JUnit). Perhaps the easiest way
to include them in your project is to click the beaker symbol in the left
sidebar; it's right below the extensions button which looks like four squares.
If you do not see this button, try creating a Java file in `src`. From there,
you can click "Enable Java Tests" and then click "JUnit" from the
dropdown. That's it! You should now see the two JUnit libraries in the lib
folder.

**Note**: if you're using VSCode for class projects, you might be wondering
why you never had to do this. In general, it's bad practice to commit binaries
to version control. However, we have no way of managing dependencies with the
custom `components.jar`, so I included them directly in the template. I did not
include them here, so you could see how it might be done from scratch. If at any
point you're struggling with Step 3, just copy the lib folder from the monorepo
template.

## Next Steps

<!-- TODO: navigate to part 1 of the portfolio project and delete this comment -->

Now that you have everything setup, you can begin crafting your component. There
will be deadlines for each step in Carmen, but you're free to complete each step
as early as you'd like. To start, you'll want to visit the [doc](doc/) directory
for each assignment file.

[components-jar]: https://cse22x1.engineering.osu.edu/common/components.jar
[jdk-downloads]: https://www.oracle.com/java/technologies/downloads/
[use-this-template]: https://github.com/new?template_name=portfolio-project&template_owner=jrg94
Binary file not shown.
21 changes: 4 additions & 17 deletions doc/02-component-proof-of-concept/02-component-proof-of-concept.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
# Portfolio Part 2: Component Proof-of-Concept

- **Name**: <!-- TODO: fill with first and last name (e.g., Brutus Buckeye) then delete this comment -->
- **Dot Number**: <!-- TODO: fill with OSU dot number (e.g., buckeye.17) then delete this comment -->
- **Due Date**: <!-- TODO: fill out with due date and time (e.g., 10/17 @ 3:10 PM EST) then delete this comment -->
- **Name**: Grace Metz
- **Dot Number**: Metz.403
- **Due Date**: 10/9/25

## Assignment Overview

<!-- TODO: read the assignment overview then delete this comment -->

Previously, you brainstormed three ideas, and hopefully you got some feedback as
well. However, it's impossible to know how reasonable your design actually is
without trying to implement it. Because you're only just learning our full
Expand All @@ -30,8 +28,6 @@ the more work you can put in now, the better.

## Assignment Checklist

<!-- TODO: browse the checklist then delete this comment -->

To be sure you have completed everything on this assignment, we have littered
this document with TODO comments. You can browse all of them in VSCode by
opening the TODOs window from the sidebar. The icon looks like a tree and will
Expand All @@ -53,8 +49,6 @@ to the tree diagram (you may remove this one as well):

## Assignment Learning Objectives

<!-- TODO: read the assignment learning objectives then delete this comment -->

Without learning objectives, there really is no clear reason why a particular
assessment or activity exists. Therefore, to be completely transparent, here is
what we're hoping you will learn through this particular aspect of the portfolio
Expand All @@ -68,8 +62,6 @@ project. Specifically, students should be able to:

## Assignment Rubric: 10 Points

<!-- TODO: read the assignment rubric then delete this comment -->

Again, to be completely transparent, most of the portfolio project, except the
final submission, is designed as a formative assessment. Formative assessments
are meant to provide ongoing feedback in the learning process. Therefore,
Expand Down Expand Up @@ -114,8 +106,7 @@ Below is further rationale/explanation for the rubric items above:
> to create a new design. In you do end up picking one at random, you should
> disclose that here as well.

<!-- TODO: briefly argue your choice of design or design something
new; then delete this comment -->
I believe that the artificial neuron is the one that is the most interesting to me personally, and I also believe that, minus some need for research on machine learning algorithms, the component would likely be fairly simple to implement. At the most basic level, it essentially functions as a calculator; evaluating values based on a pre-set formula and outputting a result.

> Once you've argued your choice of design, make a branch in your new repo called
> something like `proof-of-concept`. There are many ways to do this, but my
Expand All @@ -126,8 +117,6 @@ new; then delete this comment -->
> we'll want a branch that you can later make a pull request from with all
> your changes.

<!-- TODO: make a new branch from main then delete this comment -->

## Assignment Tasks

As stated previously, your goal with this assignment is to produce a Java
Expand All @@ -153,8 +142,6 @@ completed the assignment.

### Changelog

<!-- TODO: update CHANGELOG then delete this comment -->

At the end of every assignment, you should update the
[CHANGELOG.md](../../CHANGELOG.md) file found in the root of the project folder.
Here's what I would expect to see at the minimum:
Expand Down
10 changes: 4 additions & 6 deletions doc/03-component-interfaces/03-component-interfaces.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Portfolio Part 3: Component Interfaces

- **Name**: <!-- TODO: fill with first and last name (e.g., Brutus Buckeye) and delete this comment -->
- **Dot Number**: <!-- TODO: fill with OSU dot number (e.g., buckeye.17) and delete this comment -->
- **Due Date**: <!-- TODO: fill out with due date and time (e.g., 10/17 @ 3:10 PM EST) and delete this comment -->
- **Name**: Grace Metz
- **Dot Number**: metz.403
- **Due Date**: 10/23 12:40pm

## Assignment Overview

Expand Down Expand Up @@ -132,7 +132,7 @@ hierarchy diagram using whatever tools you would like. Then, include a picture
of it in this folder. You may also embed it just below using markdown syntax
(i.e., `![ALT TEXT](path/to/file)`).

<!-- TODO: make a diagram of your component hierarchy then delete this comment -->
![Interfaces Diagram](doc\03-component-interfaces\Interfaces (1).pdf)

To start making your interfaces, make a branch off of main in your new repo
called something like `interfaces`. There are many ways to do this, but my
Expand All @@ -154,8 +154,6 @@ to see them. If you don't like this workflow, you may try following the
rebase strategies described [here](https://stackoverflow.com/questions/35790561/working-while-waiting-for-pending-pr)
and [here](https://stackoverflow.com/questions/18021888/continue-working-on-a-git-branch-after-making-a-pull-request).

<!-- TODO: make a new branch from main then delete this comment -->

## Assignment Tasks

Your primary task for this assignment is to draft two interfaces in line with
Expand Down
Binary file not shown.
Binary file added doc/03-component-interfaces/Interfaces.pdf
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Portfolio Part 6: Finishing Touches

- **Name**: <!-- TODO: fill with first and last name (e.g., Brutus Buckeye) and delete this comment -->
- **Dot Number**: <!-- TODO: fill with OSU dot number (e.g., buckeye.17) and delete this comment -->
- **Due Date**: <!-- TODO: fill out with due date and time (e.g., 10/17 @ 3:10 PM EST) and delete this comment -->
- **Name**: Grace Metz
- **Dot Number**: Metz.403
- **Due Date**: 12/9/2023

## Assignment Overview

Expand Down Expand Up @@ -307,44 +307,53 @@ Take some time to fill them out honestly.
> complete the portfolio project, how much better (or worse) do you think you
> understand software development and why?

<!-- TODO: discuss -->
This project definitely helped me to better understand the software development process, and I hope to continue applying these skills in the future. Even though the material presented in class and throughout the projects may allude to some of the skills needed in the portfolio project, I think that this was a great opportunity to learn more about the software life cycle in a "real world" setting, while still using a familiar API.

> Also, did the portfolio project surface any gaps in your own knowledge of
> software development. If so, what are those gaps and how did you address them?

<!-- TODO: discuss -->
While developing the NeuronSecondary class, I realized that I wasn't too confident in my understanding of abstract classes and how they worked. To remedy this, I looked at examples of abstract classes in the OSU API and compared those implementations with the class slides.

> Finally, as a part of completing the portfolio project, to what extent has
> your perspective of software development changed, if at all? In other words,
> is software development something you still enjoy? If not, why not?

<!-- TODO: discuss -->
I enjoy software development still, even though I am excited to see what's out there besides the OSU way of doing things. For my job, I use SQL and Python and enjoy the process of writing programs using those tools. By completing this project, my perspective has changed in the positive direction, but I'd like to continue learning before coming to a final verdict.

> One of the challenges of completing the portfolio project is picking up a lot
> of skills on your own. Some of these skills are, of course, software skills.
> However, there are plenty of other skills you may have picked up through
> this process. Therefore, the first question is what skills did you pick up
> through this process?

<!-- TODO: discuss -->
Some skills that I picked up:
- Branch handling, making pull requests using GitHub/Git
- Writing software that layers on itself in a way that somehow works
- Using a basic statistical model for artificial neuron activation
- Using an artificial neuron for different tasks
- Updating and maintaining a changelog for projects

> The follow-up question is: could you rephrase these skills you picked up
> as bullet points that you could put on a resume? Try it below.

<!-- TODO: discuss -->
- Utilized Git for version control
- Wrote clean, production-ready software in adherence to OSU Software Sequence principles
- Applied knowledge of statistical models to a machine learning context
- Developed demo programs to showcase the artificial neuron's use cases
- Updated and maintained an accessible changelog and documentation

> Next, how has working on this project affected your career trajectory?
> In other words, do you now hate the topic you picked? Or, are you even more
> interested in it? Both outcomes are valuable to your personal development.

<!-- TODO: discuss -->
I am interested in machine learning as I believe that it is a useful field of study that has the potential to help many people. By making an artificial neuron and using it in different ways, I picked up some knowledge on statistics and logic that will be helpful in the future. Overall, I'm excited to continue learning.

> Finally, consider the skills you've picked up and your current career
> trajectory. What are some things you could do to continue on your
> career trajectory? Also, who are some mentors you could contact to help
> you stay on your path?

<!-- TODO: discuss -->
I currently am working as a Product Intern for a healthcare company, and that is the field that I want to stay in for my future career. To stay up to date on the skills that I need, I can pursue certifications or courses in things like cybersecurity or data science. I can also gain mentorship from my bosses and engineers on my team, as well as other interns who may be further along in college or in their careers than I am.

### Changelog

Expand Down
61 changes: 61 additions & 0 deletions src/NeuronDemoConsole.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import java.util.Scanner;

import components.neuron.Neuron;
import components.neuron.Neuron1;

/**
* Very simple implementation of the methods in the Artificial Neuron component.
* This demo uses the console as the source of input/output.
*
* @author Grace Metz
*
*/
public final class NeuronDemoConsole {

/**
* To prevent instantiation.
*/
private NeuronDemoConsole() {
}

/**
* Main.
*
* @param args
*/
public static void main(String[] args) {
// Decide whether today is a good day to go windsurfing
// (conditions should be sunny and windy)

Scanner in = new Scanner(System.in);

Neuron windsurfingDecider = new Neuron1();

System.out.println(
"Please enter a word that describes today's weather: ");
windsurfingDecider.setInput(in.nextLine());
System.out.println(
"Please enter how good that condition is for windsurfing (-1 to 1): ");
windsurfingDecider.setWeight(Double.parseDouble(in.nextLine()));

System.out.println("Enter another word? (y/n): ");
String loop = in.nextLine();

while (loop.equals("Y")) {
System.out.println(
"Please enter a word that describes today's weather: ");
windsurfingDecider.setInput(in.nextLine());
System.out.println(
"Please enter how good that condition is for windsurfing (-1 to 1): ");
windsurfingDecider.setWeight(
Double.parseDouble(in.nextLine()));
System.out.println("Enter another word? (y/n): ");
loop = in.nextLine();
}

System.out.println("Today is a good day for windsurfing: ");
System.out.println(windsurfingDecider.activate());

in.close();
}
}
Loading