Staff Software Engineer with 15+ years of experience building and leading teams across fintech, healthcare, and platform engineering. Currently modernizing authentication and authorization systems at Altruist. Previously directed engineering in trading at Envestnet, building multi-threaded stock trading applications with FIX Protocol, and led DevOps and continuous delivery at Reed Elsevier (now RELX) for ClinicalKey.com on AWS.
Temple University BS in Information Science & Technology (Cum Laude), with a post-baccalaureate certificate in AI & Machine Learning from Drexel University. Recognized as a Future Leader by the Society for Information Management Philadelphia Chapter. Volunteer crew leader with Friends of Wissahickon since 2019.
Outside of work, I build things — from Unity game prototypes and Arduino-powered cold frame hinges to electric bikes with custom battery packs. Below is a collection of projects and work I've done over the years.
The goal of this project is to create a powered hinge for a cold frame or green house that automatically opens and closes based on temperature. An arduino was used for the control board to read the temperature sensor and instruct the servo motors when to operate.
2D level creation with Cellular Automata and Connected Component Labeling
Worlds are generated with multiple zones and levels inside. Each level is created using Cellular Automata techniques to generate the solid parts of the terrain. Levels are currently only rectangular in size, and each level has multiple paths/doors to other levels. These paths are created randomly within a tree like structure.
Level Creation Steps:
Run Cellular Automata Logic
Create Border Walls
Find all Open Spaces via Connected Component Labeling
Create Border Doors
Ensure all open spaces are accessible by the player
Ensure all border doors are also accessible.
To ensure that all doors on the levels are accessible to the player, A Star path finding techniques are used after level boundaries are created and cellular automata logic is run. A Star is run between each pair of doors within a level, with weights on solid cells of the grid being very large, causing the path finding to travel through already opened areas created via the cellular automata. If a door is not accessible the path finding will remove solid cells to ensure accessibility.
Connected Component Labeling was used to ensure that all open/non solid areas of the level are accessible. Each connected open space is checked against its neighbors to ensure it is accessible by the player, path finding is then used to create a path if needed.
Goal-Driven Agent Behavior for Enemy Control
Enemy Behavior was created with a design pattern found in the book Programming Game AI by Example. This allowed each enemy to have emergent behavior based on various goals and conditions of the game world. Goals and actions included keeping rooms cleared of enemies, avoiding attacks, seeking out health, etc.
Game concept: Starting with a base mothership that allows the player to create collector ships to collect resources. With these resources, ship attachments can be made including defensive systems, weapons, armor, fuel, batteries, etc. Ships are limited by the power generation, create a challenge to manage building out the ship, traveling to collect resources, firing weapons, and high speed assault maneuvers.
Techniques Used:
Goal-Driven Agent Behavior for enemy movement and ship construction
Messaging to support disparate game actor communication with Goal-Driven Agents
Object Pooling for projectiles
Unity's Physics and collision detection to support movement, collisions, and ship building.
Object Pooling for projectiles and short lived objects.
Different camera logic for levels to provide a different feel. Locked camera for boss fights and puzzle areas. Moving camera for long exploratory areas. Camera on "rails" that ensures camera moves with player but stays within level bounds to give a more predictable camera location, and prevent excessive dead areas on screen.
Custom built character controller to get very precise 2D movement.
Parallax Image techniques to show movement on 2D landscape.
Added Working Turrets that shoot. All entities have health, when they run out of health they are removed from the scene. Sounds are activated when the player or the turret shoots as well as on projectile impact.
Updated the level collision detection code to support two images, one image (bottom) that is actually rendered to make up the level, and the second image (top) that tells the collision block creation code what type of collidable object to make. Anything transparent is non-collidable, anything black is solid and can't be destroyed and anything red is collidable and can be destroyed.
So I have been playing around with game development for a while. First I had alot of trouble picking a game engine and a language. For a while, I was doing alot of webdesign with PHP and mySQL, which isn't very similar to game development. Now I am currently working as a J2EE developer (JAVA and JSPs). I first started out playing around with Unity Game Engine which is very nice, but I'm the type of person that likes to know how everything works. Unity does a great job at allowing you to focus on the game and its content rather then the engine and architecture of how the game works. I then decided that I would use jMonkey Engine and create a 3d space shooter type game. This was going well, but I felt I was spending more time tweaking physics settings and 3D modeling then actually coding the game.
Recently I decided I would give Slick2d a try.
I am currently working on multiple aspects of this game, but the initial development was on creating levels. Slick2D supports levels created out of tiles that you can easily create with third party tools, but this only allows for very rigid levels. I decided that I wanted something more flexible. I finally decided that I wanted to be able to import a png image with transparent background. Anything opaque would be mapped as solid for the collision system. Below is the initial result.
Online Auction Site for College Students. PHP/mySQL as well as AJAX for smooth operation. Created the Complete Design and Idea with 3 Partners. Made with Code Igniter.
Portfolio - Temple University Web Development Ticket System #
June 2012
Web DevPHP
PHP/mySQL as well as AJAX for smooth operation. Created the Entire Design. Used by Temple University Web Development Team to manage updates and projects for the Fox School of Business and School of Tourism and Hospitality. Made with Code Igniter.
Portfolio - Thank You Student - Temple University #
June 2012
Web DevPHP
PHP/mySQL as well as AJAX for smooth operation. Created the Entire Design. Used by Temple University to thank students. Made with Code Igniter.
Uses PHP/mySQL with PHP admin back end to control items and updating.
Portfolio - Temple University STHM Senior Seminar #
June 2012
Web DevPHP
Standard PHP templates, with up to date CSS and table-less layout.
Portfolio - Springfield Township School District #
June 2012
Web DevPHP
Updating and PHP work. Upcoming Events PHP event list. mySQL server runs backend, with PHP admin pages. PHP and mySQL Student High School Voting System.
I modded halo for PC under the name of Ang88, back when it first came out. I worked by myself for a while, was part of ClanX and then joined =EP and participated in the =EP map team. I created alot of maps, but unfortunately many of the sites are down now that have references to the material and maps I made, also, my harddrive died that had most of the files, so I have very little left of the very interesting work that I did.
One of the maps that was never finished but got alot of fame was the Ndugu map for Halo. I did alot of work on this, and had a great time making it, but sadly it was never finished because my team fell apart.