This site serves as a way for me to display some of the projects that I have worked on during my undergraduate career at the University of Wisconsin-Madison. Please check out my projects listed below, and don't hesitate to contact me.
University of Wisconsin-Madison
B.S. Computer Sciences
B.S. Mechanical Engineering
Expected Graduation: May 2016
Web Developer
Wisconsin School of Business
(March 2013-present)Mechanical Engineering Co-op
Kimberly-Clark Corporation
(May 2015-December 2015)Brief Description: This project is still in the process of being completely implemented. It is set to go live around mid-october. This is a web application that graphs the returns of a group of MBA student's investment profile.
How it works: On the front-end, the application uses google charts API to graph a series of points (current investment profile worth). On the back end, there is a JSON generator that interacts querys a database to serve a JSON file that the google charts javascript can read. The process of data acquisition starts out with the students profile registered with Merrill Lynch (ML). ML keeps track of their profile, and at the end of each week, transfers a file (.csv) to our servers with a day-end report of the profile. There is another routine that I wrote that looks for this file, parses it, and inserts it into an MSSQL table. The entire process is automated, which I thought was extremely cool, and was a challenge to implement.
Link to project (dev version)The dev password is 'graaskamp', and the production version contains sensitive information so I cannot give information about it.
Brief Description: These are a series of javascript calculators that I built for an online business school course. They are used by students to calculate various financial values (i.e. time value of money, interest rates etc...). Students use these when they do their homework, and also when they are taking online exams.
How it works: There are a series of inputs, and outputs for each calculator. All of the math and equations are calculated using javascript. Some equations proved to be very simple calculations, and other required some good problem solving to figure out. In particular, some problems were only able to be solved using a guess-and-check method. At first, I thought this would be rather easy to implement just using a loop. Well, I was wrong. The professor that I was creating these for wanted exact values to the 6th decimal place (eg XX.XXXXXX). When I first implemented a strict increment (+0.000001) guess and check method, my browser would time out, as it was running too many calculations, and would take too much time. This is when I had to think outside of the box, and try to think of a more intelligent solution.
I started searching for convergence algorithms that would converge to limits quicker than straight iteration, and I read about the Newton-Raphson Method. In a nutshell, this algorithm makes a good prediction of what you should increment your variable you are searching for by comparing your current formula divided by the analytical derivative of that formula. Once I got this to work on my guess-and-check functions, they worked much quicker, and for some calculations, to the points in which you wouldn't even realize that the code behind is iterating over a possible range of values
Link to projectBrief Description: This application was written for INSITE, which is an entrepreneurship organization within the school of business. This application helps aspiring entrepreneurs that attend UW-Madison find resources that are local to campus and the local madison area. When I started this project, I wanted to create something with tools that I never used before. I ended up using AngularJS to create the dynamic content on the page, and Papa Parse to parse a csv file that is acting as my database table. The reason I chose to use a csv hosted on the server instead of a traditional SQL database, was that the client for this project wanted to update the database frequently, and not have to submit changes to my group to update the database. I thought of the idea of creating a password protected admin interface that gave them the ability to upload a .csv file, that would replace (and archive) the previous .csv file.
Link to projectBrief Description: This tool is used by the financial management office to run reports that query our databases for transactions that occured in a specific period of time. To adhere to standards of the university, these reports need to be generated on a monthly basis, and that is about as much information as I was given for the use. The application formats the information in a way that is importable to the software used for managing transactions.
This is not public
Brief Description: This application is a search and filter type of application. There is a database with all of the contact information for the School of Business's current Ph.D. Students, and the department wanted an application that would allow users to search and filter for said information.
How it works: There is a database that has all of the students' information in it. I wrote an application that based on url queries, searchs and queries said database and serves up a serialize JSON file. On the front end, I wrote a javscript application that looks creates these queries based on user interaction with the application, then grabs the appropriate information and displays in on the page.
Link to projectBrief Description: These are 3 seperate small MVC applications that are portals used to collect funds by the MBA department at the school of business for different events.
How it works: There is a lot going on in the back-end that is hidden to the user when they fill out these forms. For these projects (mostly the first one I made), I had to read a lot of documentation about what central UW-Madison campus used for secure transactions. Central campus uses a payment system called CashNet. Each of these forms is very similar to the next one. We collect information, store it in our database, send them to cashnet to pay using a credit/debit card, and then cashnet sends a POST back to us, in which we can confirm that the transaction was successful and update our database accordingly. Another aspect that I had to also later implement to each of these storefronts is that there was another service that the Financial Management Office was using to control funds (and a lot of other stuff that I don't understand). So everytime we receive a successful POST back from cashnet, I added to the controller a web request (or a GET)to another application that another service was using to run reports of payments coming in.
An additional part to each one of these projects was creating admin interfaces that people working for the WSoB could access. These are just simple CRUD applications that let the admins see what is in our database, and also download it as an excel file.
Links to the 3 forms:
Brief Description: This is an image slider.
How it works: I wrote a jQuery function that grabs photo galleries and captions from Flickr and throws them into a slider plugin called slick.js. Also, I created a sitecore widget (aka web control) for said slider. This widget is used by content contributors to add sliders to webpages without any help. It simply requires the photosetID from flickr. The main goal of this project was to put the ability to display images (from events, or conferences) on a webpage, without having to know anything about how the code works.
Examples:
NOTE: This project was originally developed by myself. I ended up proposing it for my Software Engineering class, and it was bid upon and green-lit for the current semester. So I am working with a team of students to create something very similar to this, and more this semester. I will update links to versions as they are developed throughout the semester.
Brief Description: This is a personal project that I have been working on in my spare time. It is a Fantasy Football application that calculates a bunch of statistics, creates personal power rankings, and creates personalized statistics about your fantasy team. It is different from other fantasy football applications in that it is all centered around an individual leage. My friends and I use it in our fantasy football league. It is currently exclusive to one league, and for ESPN fantasy leagues.
How it works: Since ESPN shut down their API in 2014, I found it rather difficult to be able to grab personalized information about our fantasy football league. In short, I wrote a web crawler (using HtmlAgilityPack and HTTP GETs) that crawls the pages of our fantasy football league, grabs statistics, and inserts them into a MySql database. The application then uses this data to calculate various statistics and rankings. After studying the structure of the espn fantasy football leagues, I realized that this would be possible (but not easy) to do on a large scale, as each league is identified by a LeagueID which is passed to their application as a url parameter. During my inspection of the espn fantasy applicatio structure, I also was able to figure out how various AJAX queries were made, what information they returned, and how I could index all of that data into my database by running a single report a week. Run run this report after they update their final fantasy statistics each week. One part of the project that I rather enjoyed creating was my personal power ranking algorithm, which factored in a number of statistics to truly determine who was currently the best team in the league.
Currently, I am working on a user poll, which will rank teams on a weekly basis based on user voting.
I am treating this current season (Fall 2015) as an 'alpha' phase of the project, and making sure that my application will work for one league. Eventually, I would like to be able to open this up to the public, and let anyone create a profile for all of their ESPN leagues. I am consistently getting feedback from members of the league on things to implement, bugs to fix, and additional features.
At this time, I would not like the general public to be able to access this site, so I am not including a link to it. However, if you would like to see the project as it is being developed (and often at times, broken), please send me an email at trotman23@gmail.com and I can send you a link and login credentials to a test account.
View the code on githubBrief Description: This is an application that queries a database table of information about the past BBA class's employment out of college.
How it works: I used a jQuery plugin called DataTables to display information from a database in a front-end sortable and searchable form. I also created a custom filtering feature that allows users to sort by specific major. This is a JSON generator that queries the database table based on customized url parameters, and creates a JSON file that DataTables then reads and re-creates the application with. I decided to implement this server-side filtering because the amount of data that is in this table is expected to grow every year, and client-side sorting will eventually not be fast enough to create a clean sort. Also, this decision was made based on the audience that the page is expected to get, which is BBA students. Each student has a major, and they want to see what type of jobs other students with the same major got when they graduated.
This application is very similar to an application I created that sorts and filters a course equivalency database. The course equivalencies are between universities abroad (international) and how those courses they take will transfer back to school at UW-Madison. This application is designed differently, and uses HTTP GETs to create a table for the user based on which school abroad they attended. I made this decision (as opposed to the BBA application) because it is extremely uncommon that an individual will take multiple courses and multiple international universities.
Brief Description: This was a website I built for my student chapter of the American Society of Mechanical Engineers (ASME). It was the page for the conference that we hosted in March 2014. This conference was for all of the ASME student sections in the greater midwest. Around 400 students and professionals attended this conference.
How it works: This was the 2nd full website that I built. I used PHP for back-end scripting and dynamic content creation, and bootstrap 3 for a front-end framework. Although the majory of this site is bootstrap widgets and content, there were a couple unique things that I created while building it. I used google maps api to layout where all of the events were taking place on campus. Also, we (the planning committee) thought it would be cool if there was a way of displaying who had all registered for the conference on our website. ASME International required that we use a service called Eventbrite for all of our registration fees. So, at first everyone thought that I could just "update the website" every time someone new registered. I did not want to have to update the site 3-4 times a day, so I looked tried to think of other ways. I ended up seeing if Eventbrite had an API (which they did) and I wrote a PHP script that pulled data from our registered event, parsed it, and displayed it in real time. So I did not have to consistently update the website!
The domain and hosting services have not been renewed, I will work on getting a mirror of the site up on my personal site in the near future
Brief Description: This was the first full website I ever created. I wrote the framework once (only HTML and CSS), then re-wrote it (made it responsive using bootstrap), then re-wrote it again (using PHP for back-end scripting and simplified page creation).
A section of the website that I would like to highlight is the member resume page. I built a simple universal password-protected page that holds resumes of all of the members. (Link). This is used by recruiters to view resumes of all of the members who wish to have their resume visible on this page. In the past, we used to hand out CDs with all resumes on them, but I thought that this practice seemed ancient and that we could use technology to better communicate this information. Now, we hand out business cards with the link and the password. Also, I used tablesorter.js so that information can be sorted and filtered easily.
**note, it has been modified since I resigned (Fall 2014) as webmaster and owner of the site, but the main structure and framework is still there
ASME Madison HomepageBrief Description: For CS534: Computational Photography, our final project was determined by myself and team members. We decided to implement and modify a dehazing algorithm on images that have large amounts of haze in them. The key aspect to our design was that we wanted to use fast matting of images, which allowed the matting step of the algorithm to be run far more efficiently than a large-kernel laplacian matting. More information about this project can be found at the project website http://dehazing.azurewebsites.net/.
The source for the process can be found on my github.
Brief Description: These were a series of projects that revolved around the UC Berkely Intro to AI: Pacman Projects that I wrote for the UW-Madison class CS540: Intro to AI.
Unfortunately, the source code for the projects and for the final AI competition that myself and a partner wrote aligns with structured assignments of the course, so I do not want to post it online. The code is of course available by request.
Brief Description: For my Operating Systems class, I wrote numerous projects for the xv6 operating system, including modifications to threading, locks, task scheduling and the file system. I do not want to put this code online, as the projects from semester to semester are very similar. Projects not in xv6 included creating a lightweight shell, a simple webserver with a buffer pool for handling incoming requests, and simple parsing and sorting C program.
Brief Description: A hash map written in Java for my final project in CS367: Data Structures.
Link to project on githubBrief Description: For the controls of our remote control car, we used a java library called: LWJGL. We wrote the controller program, and then uploaded it onto our arduino board. This library works great with an Xbox 360 controller, so that is what we used. The purpose of the competition was to design a remote control car that you could operate without line of sight, so we had a webcam on the car that transmitted a live feed back to a laptop that we displayed the video on, and the controller was hooked up to.
Link to project on githubBrief Description: For my Capstone senior design project, my group has partnered with John Deere to develop a testing fixture for them to test their continuosuly variable transmissions. I will be working on this project for my whole senior year at UW-Madison. Unfortunately, all of my work on this project is considered proprietary and I am not allowed to provide figures, but I can talk about it.
Brief Description: This was a 3D SLA printed ski that I designed while working at Kimberly-Clark. The concept of it is that there are little slits in the ski, that blow out a constant stream of air. This air help the flaps of a pad stay in the proper position before they become folded.
Brief Description: This is a machine component that I designed, that is attached an outer protective lining to the sides of a pad when it is on a high speed manufacturing line.
Link to project (if public)Brief Description: I designed a series of additional parts that were placed on a bag maker. These parts allowed for quick and easy grade changes between different size bags.
Brief Description: For ME352: Machine Components and Design, myself and 2 other classmates designed a gear reducer. This process involved selecting bearings, gears, shafts, and a power supply. We performed fatigue and stress calculationis on all components.
Brief Description: I designed a tool for changing out and replacing adhesive nozzle tips on case packagers. This tool allowed for easy set up, and got rid of the need to manually re-align adhesive tips.
Brief Description: I designed spreader fingers for a product bagger that had air hoses on the tips of the fingers. These air hoses allowed for all sizes and grades of bags to be used, and remove room for human error in grade change processes. The hoses used to be on a different part of the machine, and would have to be adjusted for each size bag that the line was running
School Email: trotman@wisc.edu
Personal Email: trotman23@gmail.com
Phone Number: (612) 723-6536
Github: trotman23