I followed the online book Neural Networks and Deep Learning, by Michael Nielson, to make image recognition software that identified numerical digits in photos.
In doing so, I created a neural network in Java, which trains itself on data from the MNIST database, and uses different photos from the same database to identify with over 80% validity.
This was the most fun I've had on a project, because I got to learn while making something tangible.
I love math, so using multivariable calcus for the gradient descent was exciting.
Looking back at the text, I remember trying to understand everything that was being stated, which was a fun challenge.
I look forward to continue my studies in this field.
This project is the one I am most excited about, but mostly because it is what I have been working on most recently.
Also, I am using C++ to create it, which is the language in which I am the most confident in my abilities.
The goal of this project was to learn more about text analasis while getting introduced to natural language processing.
The program, as of right now, attempts to correctly label texts, based on training data and separate data to set hyperparameters.
With only a portion of the data set, I was able to correctly classify over 76% of the testing data used.
In the future, I plan on continuing to learn different methods of classifying, and learn more in the field of natural language processing.
The biggest benefit I find from this project is the education value.
I am reading Introduction to Natural Language Processing, Jacob Eisenstein to learn.
Personal Website
This project is what you are looking at right now!
I have been working on this for a while, more so because I opted to work on other things, and I am not passionate about website design.
I figured that building a personal website would help me learn about a different field of computer science while being a working portfolio of sorts.
A lot of time spent over thinking what frameworks/libraries/engines/services/devices/etc. to use, which was incredibly unproductive.
The biggest lesson I've learned from this, is to not overthink what I am doing, just find a goal, and do it.
The quicker I actually start working and programming, the more goals I will hit.
I eventually landed on using ExpressJS, and planned on hosting it locally on a dedicated device.
That fell through when I realized I am currently not able to login to my internet provider's user portal to portfoward, so I rented a virtual private server.
Learning web developement is important, especially because it is the easiest, most efficient, and popular medium for me to express myself and my work in this field.
The website is made up of javascript, css, and html.
I opted to not use a front-end engines/libraries/frameworks because I figured it would be more useful to learn the basics on a simple site.
The most difficult part was learning css, as you can see, but I have managed to make the website somewhat presentable.
In the end, it was useful to gain more experience in something that I am not used to doing, and to have something that I've made visible to people.
Login System
I was working on my personal website while I thought of how it could be useful to know how to develop a system to log in to.
I could not think of a useful way to implement it into my website, I dedicated some time to build it.
First, I worked on a website built with ExpressJS that had a login screen.
Since I do not know much about databases, I just chose one without much thought, and landed on mySQL.
I was able to successfully able to confirm login credentials on the website and inform the user they entered correct information.
Then, I started working on an IOS app to communicate with the server and be able to login.
I had never programmed in Swift, so it took a bit of time to build the app which held the login page.
After that, I made an Android app using Java, which I have used, so it was pretty seemless.
It was illuminating to make different software that interacted with one another, because it shows the art of incapsulation incredibly well
If I were to ever implement it into something that the public were to use, I would have to make it much more secure.
At the moment, I have the apps communicating with the server in plain JSON files.
It was a fun project that taught me about online communication and databases.
While working on the Text Classifier, I was using the 20 Newsgroups data set which has categories and subcategories.
I needed a way to iterate through each datum in a category and all of the data subcategorized in it.
Sometimes, I needed to iterate through all of the data.
I figured the easiest way to do that was to find some simple container provided by the C++ Standard Library.
For the first time in my programming, I had no data structure that could provide me with what I wanted!
Therefore, I had to take a detour away from the text classifying, and write a container.
It felt gratifying that I had to write separate code to assist in developing what I was working on.
The tricky part was that since I was using such a large data set, I had to attempt to make the containter as efficient in time and memory as possible.
CSV Visualizer
I was asked by a friend to help the non-profit he was employed by to help by creating software for their website that visualized data from CSV files.
The biggest issue was that they were using a hosting service that did not have much freedom in design, and I could only add javascript, html, and css files.
The first obstacle was parsing a CSV file in javascript, because I am not too familiar with the language.
After doing that, how to design the layout in order to make it easy to understand by the user was difficult.
I had never programmed for the sole purpose of user experience, so it was an interesting challenge.
D3 was the library I used to actually build the graphs.
The types of visualizations are scatterplots, bar graphs, listing the data, pie charts, and line graphs.
The user can choose which graph to display, along with the domain/range, and the specific data they would like to see.
This project taught me a lot about software in websites, because there were a lot of features that I want to add, but I have to consider how it would be seen by the user.
So, I was not only programming the actual function of the software, but how it would be used by the user.
It was a helpful challenge that taught me to create under the pressure of various conditions.
That being said, my friend's employers never ended up using it, but I am grateful that it was proposed to me in the first place!
Before I learned a lot about data structures and algorithms, I wanted to practice programming and improve my skills.
So, I made a playable chess application.
At the time I had bought a collection of books about computer science that talked about Java, and my friends were using Java and JavaFX.
So I decided to learn basics of making a graphical user interface with Java.
This was good practice of how to make applications usable and enjoyable for users, along with how to integrate the principles I had been learning, such as file input and output, into working code.
The load/save system writes and reads to text files of what piece is on each tile, and whose turn it is.
It was also good practice in learning how to structure my own code.
I found out that making everything incapsulated when beginning a project can be incredibly helpful down the line.
It helps to understand the code, and to edit it as I'm building it because it is easy to traverse the codebase.
Also, since I was not experienced in building my own projects, I found out that I found great satisfaction in thinking of an idea, building it, and finishing it.
I started making a bot to play me, but I figured I would rather spend my time elsewhere.
Also, the min-max algorithm would take too much time to process when computing over three moves ahead, so I decided I would learn intelligent agents in the future.
In the end, I was grateful that I had the motivation to follow through with making it, and I think it was valuable in the fact that it was one of the first bigger projects that I worked on.
This was also before I learned any sorting algortihms in school, but I wanted to learn more.
I am grateful that I love learning, because it was the motivation for this project.
I spent too much time looking online about computer science education road maps and what my classes were going to be in the future, and I figured it would be helpful to learn before I arrived in class.
Therefore, with my knowledge on JavaFX from making a chess application, I thought it would be cool to animate how sorting algorithms work.
The idea mostly came from Youtube videos of sorting animations like this.
The algorithms included in the application are bubble sort, heap sort, insertion sort, merge sort, quick sort, and selection sort.
On earlier projects, I realized that it was important keep in mind to organize code for expansion in the future.
When it came time to add more features such as the values to sort and displaying sort data, it was a lot easier to implement it.
It was interesting to see that I was gaining skills from creating projects, not just knowledge about programming languages and computer science math.