View on GitHub

Welcome to Shaun Richardson's homepage!

This page is for my SNHU CS499-T5477 Capstone course. Feel free to bookmark this to keep an eye on my project updates and thank you for stopping by

Self-Assessment

Throughout my time at SNHU, I have learned several important skills in the field of computer science that I will carry with me into my future career. Although I had some coding experience from obtaining my associates in computer programming from Augusta Technical College and spending some time in an on-campus environment at Augusta University, my classes here have introduced me to new languages, concepts, and tactics that I may not have come across otherwise. Some of the most important, and most enjoyable, topics I learned about were MongoDB (databases), algorithms, code security, and data structures. These areas are also key to a successful career since they are critical to writing industry-standard code.

Team Environments:

Throughout my education into computer science, I have been fortunate enough to partake in both online and face-to-face team collaboration projects and environments. In my face-to-face project at Augusta Technical College, I learned about collaboration within a team using tools such as Slack for team communication and GitHub repositories for managing our code base while working on similar portions of our code. We were able to work in an Agile environment, similar to how actual development teams work, and reported to our scrum master for issues and briefings. At SNHU during my CS-310 Collaboration and Team project course I was able to further develop some of those skills by actively being a part in our Jukebox project. It was here that I learned about Bitbucket repositories and how quickly projects can get out of hand when the team is not on the same page. However, I also learned about the invaluable tools that these hosted repositories provide such as pull requests and reviewing others work.

Communicating to Stakeholders:

Aside from communication with team members, I also learned about communication with stakeholders. One particular course taught me about the importance and role of a project manager and the Unified Modeling Language or UML. Typically, the project manager will be the POC (point of contact) between developers and the stakeholders ensuring that the stakeholder’s scope for the project is met. As such it is important for all parties to be clear about the project and expectations. From the developers stand-point this is where UML comes into play. Before any project starts developers should form a UML of the system to be developed that covers the scope provided by the stakeholders. Time and labor depending, this can be where developers are able to say that the team can or cannot feasibly implement certain features. Once written up the stakeholders can get a glimpse into the system they want developed before any actual coding begins and provide feedback to all parties. Doing so ensures all parties are involved in the process of developing a system and can provide the best quality final product.

Data Structures and Algorithms:

Throughout my education I have learned several critical concepts to writing code. Using the knowledge gained from CS260 Data Structures and Algorithms I’ve learned the importance of structuring applications appropriately, using efficient storage methods, and using efficient algorithms in order to reduce memory overhead of applications. I have also learned about the complexity and different timings of vector, hash tables, binary search trees, and when it is best to use each one. Understanding the design and functionality of various data structures allows me to pick and choose which ones I feel are best suited to my applications scope and allows me to tailor my code to run more efficiently.

Software Engineering and Databases:

Throughout my education I have also been introduced to both SQL and MongoDb database structures. This opportunity has allowed me to become familiar with both object-oriented database designs and relational database designs and how to work with them. I have learned how to create CRUD modules (create, read, update, delete) that allow me to interact with my databases, how to perform queries in each database, and more advance concepts like aggregation pipelines. These concepts are important because databases are a critical piece of many applications, making the likelihood that I will be working with one in the future high.

Security:

Coming from a Military Intelligence background security has always been a forefront thought in my work. So, it came as no surprise that security is a critical piece of any application development that I have always been excited to learn more about. Throughout my education courses have introduced me to security vulnerabilities related to strings, arrays, pointers, inputs, and more. I learned how security flaws can vary from crashing applications to executing arbitrary code. I have also learned how to prevent them through bounds checking and input sanitization. Overall, I have learned that when designing an application that I should always think about ways to improve security and limit inputs from the user without limiting functionality of the programs intended use.

Inclusion:

For this project I chose one artifact to improve in all three fields: Software Design and Engineering, Algorithms and Data Structure, and Databases. I chose this artifact from CS-260 Data Structures and Algorithms to demonstrate my abilities to create one clean, comprehensive, and well commented artifact. By focusing on the one program, I was able to improve its readability, functionality, and real-life application to showcase my skills. I accomplished this by converting the project from a C++ application that took a .csv file to a Python application that also uses a database and the Dash.Plotly framework, adding security through database administration profiles, a security connection algorithm, and converting the .csv file into a proper MongoDB database that connects to an interactive dashboard built in the Dash.Plotly framework. These enhancements demonstrate the knowledge I have gained throughout my time as a computer science student and showcase my ability to create a functional program from an existing project converting it into a new language.

Chosen Artifact

My artifact comes from the CS-260 Data Structures and Algorithms course at SNHU. In its simplest terms the project loads a bids csv file and can then do several small tasks such as display all of the data, find a predetermined item from the data, or delete the predetermined item from the data. However, none of the data is stored, and upon close, nothing is saved.

Code Review

Enhancement One: Software Design and Engineering

My artifact comes from the CS-260 Data Structures and Algorithms course at SNHU. In its simplest terms the project loads a bids csv file and can then do several small tasks such as display all the data, find a predetermined item from the data, or delete the predetermined item from the data. However, none of the data is stored, and upon close, nothing is saved.

The reason I chose this artifact for my ePortfolio is because it has clear room for improvement and to me seemed like a good way to showcase some of the techniques, I learned in a more recent course CS-340 client/server development. Specifically, converting a program to a new language and allowing it to become interactable with its database. This artifact shows that I can work with new tools and convert projects to a new language if that language provides a benefit to the overall project and accomplishes the course outcome [CS-499-04] by following industry-standard organization and techniques. In this case converting this project to Python allows for the projects planned future enhancements, database communication, and front-end development while not losing any of the functionality of the initial artifact.

Reflecting on this enhancement I learned more than I expected thanks to a few hiccups along the way. Initially I wanted to use the VDI (A virtual environment) that was provided within the previous course that allowed us to complete assignments with a preloaded environment that had all the tools pre-installed. I learned that it was not possible to regain this access but that ended up working in my favor, academically, because I learned how to setup MongoDB, Python, and Jupyter Notebook on my own local environment. The process of converting my project to a new language was much more straight forward and I did not run into any issues. Overall, the conversion to Python allowed the artifact to be written in a language where I felt confident enough to provide a working, interactable, database and a new redesigned front-end.

Enhancement Two: Algorithms and Data Structure

My artifact comes from the CS-260 Data Structures and Algorithms course at SNHU. In its simplest terms the project loads a bids csv file and can then do several small tasks such as display all the data, find a predetermined item from the data, or delete the predetermined item from the data. However, none of the data is stored, and upon close, nothing is saved.

I chose this artifact because it had clear room for improvement. Since this artifact was used as a learning tool all the components of the project were done in the same .cpp file. Again, being a learning tool, this artifact lacked any particular security and gave users direct access to many parameters that should have been private. With that in mind I improved this artifact by moving the main algorithms of the artifact to a Python C.R.U.D module that allows creation, reading, updating, deleting, and now security. These features accomplish the course outcomes of [CS-499-03] and [CS-499-05]. One of the main additions is this security feature that allows users to connect to the database, but only if they have been giving explicit permission to that database, by the administration of said database. Lastly, with the overall move to Python from C++ I was able to showcase my ability to convert the algorithms of my artifact into another language that will provide further benefits to the program. One such benefit is the ability for my algorithms to interact with the database and produce front-end components (Example: a DataTable). Rather than the algorithms of the artifact that only interacted with a user loaded .csv file, but changes could not be recorded or saved due to the limitations of the program.

Reflecting on this enhancement I learned that porting or refactoring code, especially in a new language, can be challenging. I had to spend a considerable amount of time learning about my new IDE Jupyter Notebook. As I stated previously, I had to setup my environment from scratch and that led to me having to learn all the libraries I needed to download using a tool I was unfamiliar with; PIP the package manager for Python. Once I had all my needed libraries converting my algorithms from the initial artifact was straight forward. Overall, I learned how to convert algorithms into a new language that, when tested, interacts with a connected database, and learned how to secure those connections between the application/database.

Enhancement Three: Databases

My artifact comes from the CS-260 Data Structures and Algorithms course at SNHU. In its simplest terms the project loads a bids csv file and can then do several small tasks such as display all the data, find a predetermined item from the data, or delete the predetermined item from the data. However, none of the data is stored, and upon close, nothing is saved.

From a database perspective this artifact had a lot of room for improvement. It was a large data set, stored in an excel .csv, and when loaded was hard to read by the user. For my improvements I converted the .csv file into a MongoDB with authorization which ultimately increased the security of the project. Next, I was able to create a dashboard using the Dash framework along with Pymongo that not only looks a lot easier to read but incorporates the main components of the artifact. My new dashboard provides the user with a data table that has been loaded from the MongoDB database using a username/password, an additional pie chart allows users to visualize the breakdown of bids (in view) based on department, and data table controls that allow users to sort, search, and remove rows. These new enhancements show that I am capable of learning and reusing new technologies, relative to my own experience, and that I can update old content/databases to an easier-to-read interactive format.

Reflecting on this enhancement I learned a lot about MongoDB, Python, the Dash framework, and the challenges that come along with them. Many of the hurdles I faced were setting up my environment to run MongoDB, as I had never used it outside of the virtual environment in the previous course. Once it was all set up, I had no issues with importing my .csv database into MongoDB, but I had to learn how to setup authentication again using a combination of previous course notes/screenshots and google. As for the interactive front-end, Dash.Plotly has some wonderful documentation that allowed me to accomplish my results posted in the link to the enhancement. Overall, I was able to accomplish a complete project utilizing a MongoDB database, Python algorithms, and a front-end using the Dash.Plotly framework that is modularized in such a way that I could easily plug in completely new databases and authentication creating a new project from this in minutes.