An open API service indexing awesome lists of open source software.

https://github.com/dizzy611/dizzy611.github.io


https://github.com/dizzy611/dizzy611.github.io

Last synced: 2 months ago
JSON representation

Awesome Lists containing this project

README

        

## Dylan O'Malley-Morrison ePortfolio

### Introduction, background, and discussions of existing skillset.

My name is Dylan O’Malley-Morrison. I’m an open-source software developer with roughly 15 years of experience. For the past roughly three years I have been working on a Computer Science degree to better learn how to integrate my existing skillset with the modern world of commercial software development as well as to enhance said skillset, with a focus on learning to work in a fast-paced corporate environment amongst a large team of collaborators. As part of the capstone project for my degree, I was tasked with producing this ePortfolio, as well as the professional self-assessment you are currently reading, featuring three projects completed throughout the course of my degree It is my hope that this ePortfolio will demonstrate skill in various areas of software development.

I begin this self-assessment by describing how I got into this field, as well as the types of skills I developed early on. I was introduced to the concept of software development at the age of roughly 9, working in QBASIC on the family computer at the time. While none of the programs produced this early on were notable enough for me to have considered keeping them around at the time, with the only substantial one being a buggy text based simulation of 5 Card Stud poker, it created in me a passion for solving problems, working with computers, and developing software that would decide what I would devote a significant part of my life to moving forwards.

My focus at the time, and still a passion evident in my existing body of work, was on making video games. My idols were people like John Carmack (ID Software), Jason Emery and Arjan Brussee (both associated with projects published by Epic MegaGames), and Tim Sweeney (head of Epic MegaGames, now Epic Games), people who pushed the boundaries of the early MSDOS based computer systems I grew up on, and who were able to produce fascinating games which demonstrated real technical artistry. I began my pursuit of this particular passion in earnest by getting into Tim Sweeney’s ZZT and other Game Creation Systems, a largely defunct genre of software that has been replaced by and arguably evolved into modern general purpose game engines. I spent multiple years involved with the community for the MegaZeux GCS, producing games for 24 hour game jams as well as a smattering of longer form projects, before, as a young teen, beginning pursuit of more serious IT skills.

As part of my involvement in this community, I began to learn the PHP and Perl programming languages. With PHP, I helped create the game review system used on DigitalMZX.net, though that has since been rewritten for greater security. With Perl, I created bots to be used, mostly for fun, on the community’s IRC channel. As part of working with these, I developed an interest in and passion for systems administration, first running a small free web host for the community offering subdomains, PHP, and MySQL databases at the age of 15, before eventually running my own IRC server on its own VPS as part of a medium sized IRC network (CADnet) at the age of 17. This would move my focus as far as software development from games development to rapid application development, specifically the development of tools to assist with systems administration and upkeep. It was at this time that I picked up Python, which is still one of the main programming languages I work with to this day.

As a young adult, this focus on systems administration transitioned into my first real work in the professional IT field, as a junior systems administrator at a (now defunct) startup web host named CyberKat. With rapidly developing skill with Linux systems administration, I rose to the position of management over the systems administration team and eventually, a few years later, an executive position at the company. Feeling unsuited to and unskilled for executive work, I eventually left this executive position and returned to software development and systems administration. From the point of leaving CyberKat through to the present day, my work in IT has either been contributing to or starting my own open source projects, working as a systems administrator on a contract basis, or short term development contracts working on tools, security, or payment processing. Most of the projects I have worked on I have been the sole person responsible for. The relative lack of experience working in big business IT and development as well as collaborating actively with large teams outside of directing administrators was a large factor in deciding to finally pursue a Computer Science degree at Southern New Hampshire University.

### Experience and skills learned at SNHU

Completing my coursework and program in Computer Science at SNHU, as well as working on the projects for my ePortfolio for the capstone course, has lead to multiple opportunities to demonstrate and greatly expand my existing skillset and to learn entirely new skills necessary for working in big business. Regarding collaboration in a team environment, through coursework discussing software lifecycles and teaching the basics of Agile, I learned how a team can work rapidly on improving software through small tasks, providing feedback to higher ups and to customers and adapting to changing needs. Through coursework focusing on collaboration itself, I expanded my knowledge of how to discuss issues and work out tasks, how to organize a team of developers, as well as how to submit and review code through collaborative environments with version control such as through GitHub. Through coursework discussing code planning, which introduced me to UML, I learned how to design a project ahead of time at the individual class definition level, and how to plan for and chart the interactions between different classes and different actors in an interaction. Through coursework focusing on secure coding, I learned how to communicate the necessity of security to higher ups and stakeholders in the company as well as how important security is in the modern world.

In terms of development itself, there are many areas in which my time at SNHU has lead to improvement. I strengthened my existing knowledge of databases and existing work in MySQL and added to it the new skill of working with NoSQL databases such as MongoDB, as well as improving my knowledge of working with big data and my understanding of statistics. I improved my knowledge on how to avoid security issues, especially memory-based issues in midlevel languages such as C and C++. I improved my knowledge on working with pointers and the risks associated with said. I learned better how hash tables function, how to design an algorithm for efficiency, and what data structures are most useful for specific purposes.

### Projects featured in summary

There are three projects that have been chosen from my work at SNHU to be part of this ePortfolio. I will discuss each in brief and the specific skills I believe each demonstrates. Following this will be links to each specific project, containing a narrative discussing the project in greater detail, the state each project was in following the completion of the associated SNHU course, the steps taken to revise it for inclusion in the portfolio and a reflection on the experience of revising said projects. In addition, a code review video of the code as it stood when the capstone project was begun as well as my plans for revising each project will also be linked below.

The first project chosen for inclusion in this ePortfolio is essentially an OpenGL model viewer in C++ using freeGLUT and OpenGL 4. Produced as part of a course on 3D graphics, it was originally largely hardcoded following the directions of the course. It was chosen as one of the artifacts to enhance for my ePortfolio due to my passion for games development and my belief that it could be freed from hardcoding and made more modular and reusable. While my initial grand plan had been to add a surrounding environment for the model as well as a player object with a first person camera and basic collision, this proved to be too expansive a modification to be produced in eight weeks while also improving two other projects, working on contract work, and dealing with some issues in my personal life. As such, the scope was eventually, reluctantly, reduced to an extensive refactor and the inclusion of new functionality in the form of the ability to load external model files in a custom format designed for the project. I believe this project to showcase my skills reworking a basic project for modularity and reusability as well as in working with arbitrary data formats and adhering to known coding standards.

The second project chosen for inclusion in this ePortfolio is a demonstration of SQL injection mitigation in sqlite3 in C++. Produced as part of a secure coding course, I was originally tasked with creating something to demonstrate a very specific type of injection and to mitigate it by scanning incoming strings for specific characteristics, the Portfolio artifact is essentially a full rewrite demonstrating how the modern practice of using prepared statements can more thoroughly prevent multiple kinds of SQL injection. I believe, in addition to demonstrating an understanding of security, this project also demonstrates my adherence to the principle of keeping it simple and not re-inventing the wheel, as instead of trying to entirely write my own mitigations from scratch, I rely heavily on the existing work of the sqlite3 developers and their library. I believe it to also demonstrate my skill with learning and deploying new API functions, restructuring code to fit an entirely new purpose while not changing what does not need to be changed, and properly documenting my work.

The third project chosen for inclusion is a dashboard for interacting with a database of shelter animals, to be used to find animals suitable for use in human rescue operations. Assigned as the final project of a course on MongoDB, it was lacking in certain obvious features. The improvements made here largely consist of implementing these missing features, most notably adding map pins for each animal fitting the current filter and additional information in the hovertext. I believe the overall artifact to demonstrate my skill in working with databases, developing middleware, an d successfully adding needing features to existing codebases.

### Links

[OpenGL Model Viewer](projects/modelviewer.md) ([direct project link](https://github.com/Dizzy611/SNHUGLCapstone))

[SQL Injection Mitigation](projects/sqlinject.md) ([direct project link](https://github.com/Dizzy611/SNHUSQLInjectionePortfolio))

[Animal Rescue Database Dashboard](projects/database.md) ([direct project link](https://github.com/Dizzy611/SNHUDatabaseePortfolio))

[Code Review Video](https://youtu.be/sgcvZrx4wMM)