AUSTIN DERROW-PINION

A Computer Science & Mathematics student at Rose-Hulman Institute of Technology

ABOUT ME

Selfie

A passion for technology, a motivation for learning, a vision for the future.


I am currently a junior at Rose-Hulman Institute of Technology, studying Computer Science and Mathematics with a minor in Psychology. I have a strong interest in artificial intelligence and software development. With data doubling every two years, I make it a point to learn something new every day.


I grew up in Fort Wayne, Indiana. I am a coffee lover, my favorite color is red, my favorite movie is Ex-Machina, and my favorite book is How to Create a Mind: The Secret of Human Thought Revealed by Ray Kurzweil.

PORTFOLIO

My CSSE473 Design & Analysis of Algorithms Convex Hull Project was a school project completed during the summer after my sophomore year as a student at Rose-Hulman. This efficient algorithm takes N many points in a coordinate plane and finds the outermost points which can contain all the other points when connected.

Project was implemented as a web application, so technologies used were Angular JS, Bootstrap, Node.js, and jQuery. You can easily load this project on your machine by using the directions in the README.md file. You can also see screenshots of the application here.

Click here to visit this project's repo on GitHub.


Sample screenshot

My CSSE473 Design & Analysis of Algorithms Trominoes Project was a school project completed during the summer after my sophomore year as a student at Rose-Hulman. I implemented two different algorithms for tiling a trominoes board. One was from a paper by Johnsonbaugh, which was a divide and conquer problem. The second was named an "L-Shape" divide and conquer problem.

Technologies used were Angular JS, Bootstrap, Node.js, and jQuery. You can easily load the project on your machine bhy following the instructions in the README.md file.


Click here to visit this project's repo on GitHub.

My MA490 Machine Learning Neural Networks Attempt to Mimic Several Functions Project was a school project completed during my Sophomore year spring quarter as a student at Rose-Hulman. In this study, we attempted to compare the power of neural networks’ ability to mimic functions with the functions themselves. The Universal Theorem of Approximation states that for any continuous function, there exists a feed-forward network with only a single hidden layer that can approximate it.

We were able to train with reasonable accuracy on linear functions, continuous functions, and a sine function which has clear repetition. Some of them were able to extrapolate further past the training data, which tells us it did a great job at generalizing the function overall. Others we were unsuccessful with extrapolating much past the training data.

The Universal Theorem of Approximation does not say anything about extrapolating, but just being able to fit a graph in a given range. Neural networks are very good at fitting perfectly in a given range, but extrapolating past that range is a much greater challenge because it must overcome over-fitting.


Click here to visit the final report hosted on GitHub.

My CSSE230 Data Structures and Analysis of Algorithms Navigational Map Project was a school project completed during my Sophomore year winter quarter as a student at Rose-Hulman. The project idea was created by my professor with a set number of required features. As a group, we decided on implementing several other features to go beyond the requirements. It was our job to come up with proper data structures and algorithms in order to implement the features in an efficient manner. We applied our knowledge of data structures taught throughout the course to implement a graph data structure. We added all the state capitals (minus Hawaii's and Alaska's) as possible destinations.


Frontend capabilities (mainly implemented by my group partner) include:
  • User can specify a starting, ending, and numerous waypoint destinations to travel to. The user can then decide between three searching criteria: shortest time, shortest distance, most interesting route (prioritize destinations in route by their rank). Also, if requested, routes with only a specified number of waypoints in total will be displayed as options. The user will recieve the three best route options available ordered from best to worst.
  • If a route is clicked on, the route is highlighted out on the map for the user to see.
  • Routes display the cost of time, distance, and interest (sum of interest ranking from each destination).
  • A user can print a selected route to a real life printer using the "User" options in the Menu.
  • Details about a destination can be viewed in the right panel by clicking on a route (ending destination is viewed) or by hovering over a destination on the map in the middle panel. Details include the name, state, a picture, coordinates, and interest rating. There is also a button to open up an embedded Wikipedia page of the state capital.
  • Users can list all the different destinations that are above a certain interest rating to view their options or maybe try to find a vacation spot. The list of destinations will pop up and can be clicked on to view details in the right panel.
  • There are admin options in the menu that allow anyone (with the correct password) to insert or delete new destinations within the graph.
  • If when typing in a destination, a name does not match, the GUI will display suggestions (retrieved from the backend) and can be selected and will automatically be inserted in the text box in the proper format for the user.

Backend capabilities (mainly implemented by me) include:
  • All the destination objects were created by parsing a text file with the necessary details for each one. After creating all the destinations and inserting them into the graph data structure, the graph was saved to an XML file in order to save some efficiency on startup.
  • The graph was implemented by storing a HashSet (using a LinkedList array and a hash function based on the destination's name) of all the destinations and having all of the destinations store the connections themselves.
  • A connection is simply an object that stores two destination names and the cost. To reduce space, both destinations store a unique LinkedList containing shared connection objects so that there does not have to be double the number of connection objects stored.
  • To calculate a Route for a user, a min-heap priority queue data structure was chosen to take advantage of A*'s searching efficiencies. It starts with a single route object that only contains the starting destination, then builds itself using A* until the guaranteed best route is at the top of the min-heap priority queue. When a route is taken off, the data structure will automatically rebuild itself to find the next best route available. It takes in considerations of waypoints and different cost functions. It is very scalable for any kind of route, additional destinations, and additional cost functions.
  • Used in the A* algorithm, the "straight line distance" between two destinations was calculated using the "Great Circle Navigation Formulae." Since the world is not flat, it seemed like a bad estimate for the heursitic function, so I found this method online that calculates the actual distance in miles and will even return the exact number Google Maps provides when asked the straight line distance.
  • The Route class simply extends a LinkedList to efficiently store an ordered list that can quickly add more to the end.

Click here to visit this project's repository on GitHub.

My CSSE333 Databse Systems Stream Project is an Android application built using Android Studio. My group consisted of Kice Sanders and myself. We used Microsoft SQL Server 2014 Management Studio to build the database used in the application. We were a three person group initially. With this arsenal ready to start, we projected a project that turned out to be too much work for a couple reasons. We set out to make an android application that combines the features of Facebook and Twitter into one.


Features include:
  • Users can create an account with Stream and sign in with Facebook.
  • With these accounts, the user can add friends within the Stream app, then message and view their profiles.
  • Users can also add someone to their ignore list so that their name does not come up when either one of them search for each other.
  • Users are able to message with response time nearly instant. This is because all tables in the database are indexed properly for efficieny.
  • All of this data is stored in a database, therefore security issues arise, but we made sure they were fixed:
    • SQL Injection does not work.
    • All communication between the Android application and the database was executed through stored procedures.
    • By only allowing stored procedures, it prevents any malicious users from retrieving information about the database.
    • Users only have access to data they should be allowed to, such as their friends, possible users to add as friends or to put on their ignore list, messages between themselves and other users, and their own profile information.
    • Passwords were required to be at least 5 characters long with at least one alphabetical character and one number.

Database details include:
  • All tables have proper primary keys set.
  • Referential integrity is maintained through foreign key constraints.
  • At least one clustered index or non-Clustered index is on every table based on how the table is used (in order to keep maximum efficiency).
  • Stored procedures are implemented for every functionality aspect of the database for the Android application to use.
  • Views are created to aid in speed of accessing data in stored procedures and to maintain security by not giving access to other data from the other tables.
  • Triggers are implemented to toggle between which picture the user wants to select to be viewed. A bit is stored with each social media page an account is linked to. If this bit is '1', then the picture that goes along with the profile is set to be their profile picture, viewable by their friends. If a different picture for that same user is ever set to '1', this trigger will fire and ensure all of the other pictures are set to '0' to avoid confusion and false data.

Here is the open source code provided on GitHub. You can download the application, but will not be able to see any data unless on the Rose-Hulman network because that is where the database is hosted unfortunately.

Hero is a Chrome Extension developed by Paul Bliudzius and I over the summer of 2015. This was a learning experience for me because it was the first form of any web development I have ever done. Previously, I had little knowledge about HTML, JavaScript, and CSS, but after developing that (and this website), I have learned a lot about web development.


Features include:
  • Reading reviews created by other users who use Hero
  • Give either an "up-vote" or a "down-vote" to reviews created by other users (not allowed on your own review)
  • Rate the current website (domain, not page) the user is on
  • Give a review of any length under 140 characters
  • At anytime, go back to a website and edit your review (only one review allowed per user on a single domain)
  • Blocking injection and maintaining user's security
  • Contact the developers (Paul and I) through the website.

Hero logo

Click here to install the extension for yourself and try it out.

My CSSE220 Object Oriented Programming Arcade Game Project was the second project I had completed as a Rose-Hulman student. Developed in the winter quarter of my freshman year, this was a huge learning experience. The graphics are not very pretty, but as a group, we tried to make the best of it. The project idea was created by Rose-Hulman professors, but was inspired by a well known game, Dig Dug.


Features include:
  • Hero (the user, Shrek), is controlled using the arrow keys
  • To progress to the next level, the user must collect all of the onions on the map
  • While the user plays through a level, two different monsters will attack
    • Nobbin: spawns continuously at a spot in the map (max number of monsters is 2 + the current level). This monster cannot dig through the dirt, therefore we wrote an algorithm to find the shortest path from its current position to the hero through the already created tunnels. This monster also randomly changes into a 'Hobbin' monster and then turns back to normal after a certain amount of time. Graphically is Lord Farquaad, from Shrek.
    • Hobbin: digs through the dirt, ignoring tunnels, to get to the user in the quickest possible route. Graphically is Dragon, from Shrek.
  • Hero can shoot a ginger bread cookie (using the space button) at monsters to eliminate them
  • Money bags (Donkey from shrek) can be dropped if there is an empty space underneath. If the bag drops more than one square, it will burst open and turn into Princess Fiona (also from Shrek). At this point, Princess Fiona can be saved by the Hero (Shrek) from the evil monsters to gain more points. If a money bag ever collides with a monster or the Hero, they will be eliminated.
  • The Hero (Shrek) has only 3 lives to get through the game. If at any point the lives run out, the user can restart the game and their lives will go back to 3 again.
  • Although there were only three levels made, we have a text parser that turns a text document into a level. Therefore, new levels can easily be created by creating another text document and labeling each block in a map with a key letter described in our code documentation.
  • When the user wins the game (collects the last onion on the last level), the user is congratulated on their success and have the option to play again.
  • In the background, the song All Star by Smash Mouth plays to give more entertainment to the game.


Here is a quick video I made to show a playthrough of the game. Click here for a direct link if the video isn't working.

CONTACT ME

LinkedIn:

View Austin Derrow-Pinion's profile on LinkedIn

GitHub:

Follow @derrowap

Email:

Rose-Hulman
If your browser does not support viewing PDFs, here is a direct link.