Projects

Withdrawn Loan Status

At the start of this relatively straightforward epic, there were a number of “terminal” loan statuses already in existence: abandoned, expired decision, expired contract, and finalized. Somehow missing from this list was a way for lenders to withdraw a loan in the FG LOS. We had to integrate this functionality with many other services across the site including user permissions, the automatic decision engine, the decision status cron, and application queues.

FG Virtual Environment

Vagrant
Vagrant

After botching my local Homebrew development environment, I decided to create a virtual instance to facilitate FG development. This way, no matter what crazy things I decide to do on my Mac in the future, nothing will affect my ability to contribute to the project. And if I screw up my virtual environment, I can quickly recover it. My documentation provided a template for the steps required to build a local environment programmatically using Ansible so that current and future developers have only to clone the software repo, download VirtualBox and vagrant, and `vagrant up` to begin coding.

Collateral Core Code

Symitar, a software system powering hundreds of credit unions, uses collateral codes for all loan types regardless of whether they are secured or unsecured. In an effort to comply with industry standards, we needed a Symitar integration to provide options to allow the user to supply a collateral core code for every loan type defined in their system. The newly defined collateral code can now be sent to the Symitar core on loan approval, thus allowing banks another way to distinguish loan types.

Symitar Core Validation

Symitar
Symitar

The task to be solved consisted of enforcing a 4-digit max size to Symitar core codes. It sounded easy enough, but a quick run through the domain revealed that core id fields were spread across eight different admin pages, each uniquely structured, implemented within their own context. I had to extend existing jQuery Validation library functionality to accept custom messages and errors returned from Ajax requests to the back-end. My eventual solution was done in a way to be easily extendible to future core implementations.

XmlEntities

FinanceGenius software emails developers an XML-formatted debugging string when an error is encountered. The problem was that certain email clients were treating XML tags as if they were HTML. The goal of this ticket was to properly render these entities using any email client.

Executive Dashboard

Intel Executive Dashboard
Intel Executive Dashboard

The Executive Dashboard began as a one-off project that allowed Intel executives to quickly assess the effectiveness of current marketing campaigns across the twittersphere. Client admins are now able to quickly create any number of custom dashboards, each consisting of tabbed dataviews that present easy-to-digest social business intelligence in a number of customizable ways.

Sum Pairs

The goal of this coding kata is to come up with a solution for the following bearing in mind what this might mean for processing at scale: Write a function f(x) that returns all distinct pairs of integers between -50 and 50 (inclusive) whose sum is X.

Journal

Journal
Journal

I created a simple multiuser journaling application while learning Laravel 5. The date dropdown on the form omits previously logged dates to let the user know what dates have not been logged. A non-trivial weighted average calculation is available for whatever single biometric field you choose to log. The user can log a single day at a time via the logging form, or bulk upload via CSV.

Job Apps

Jobs
Jobs

When I decided it was time to start looking for a new opportunity post W2O Group, I really wanted a centralized place that I could keep tabs on the jobs I’d applied for and the potential jobs found that I might yet apply to. Job Apps is a standalone application that will help you stay organized while seeking employment. I find it super helpful… and you can too!

HipChat

I wrote a simple object-oriented solution whereby special callout classes (ie: mentions, emoticons, links, future features) directly inherited from an abstract class that provided business logic functionality common to all callouts. The actual parsing code was broken up into smaller modules. By coding these classes to an interface, I was able to decouple the business logic from the parsing code. I employed the strategy pattern to meld everything together. As such, this approach is easily extendable to new functionality.