About Me
I am a computer programmer passionate about Graphics, Simulation and Machine Learning, a bass player since 1983
afflicted with a 30 year fetish for too-many-strings; a collector of Pixar teapots and Carrera slot-cars;
a husband, father and crazy cat-dude. I live in Roswell, Georgia, I've been married since 2001,
I have 3 wonderful minions kids (my daughter was born in 2007 and my twin boys in 2011) and, currently, 7 pampered, indoor cats.
Recent Professional Accomplishments
At the end of March 2022 I completed a 2 year contract as a Research Engineer working on the Habitat project, a simulation platform for research in Embodied AI. My focus has been developing in C++ and python, expanding the functionality, flexibility, stability and dataset support of the simulation platform, Habitat-Sim. I still contribute to the project when I can, and a summary of my contributions since March 2020 can be viewed on Github. From October 2013 to November 2016 I also worked full time as a Data Scientist at IgnitionOne, an independent online marketing company.
Back to School
I graduated from Georgia Tech in 1992, and although my first degree was in Electrical Engineering, professionally I've always been a programmer. Through the 90's I worked in client-server development (One of the systems I wrote was a code generator in Pascal that took screen descriptions from AS400 COBOL and generated early Windows 3.1/95 UI code) and telecom (writing IVR/VRU scripts, among many other things). In the 2000's I worked as a contractor/consultant on client-server and web-based business applications, mostly in C# or various early active webpage technologies, using various Microsoft platforms such as ASP and ASP.NET, but not always. Pretty much whatever language or system was required, I would figure it out and work in it.
Still, I grew tired of and disinterested in the nature of the positions it seemed I was being limited to (business application development) and felt that, despite being self-taught since the early 80s (or perhaps because of this), I needed to "legitimize" my knowledge to expand my career opportunities in more interesting directions, so in 2010, at 42 years of age, I decided to go back to school and re-enrolled at Tech as a full-time Undergraduate CS student.
Although Tech gave me credit for the classes I took for my first degree (a mixed blessing since I was a mediocre student the first time around) I decided to retake all my undergraduate Calculus classes. After all, it had been 18 years since I had been in a class room, and the most complex math I had to perform since then was calculating a tip. Surprisingly enough, I discovered that I loved math, and was surprisingly good at it too, much better than the first time around. Good enough that I felt I had to find a way to fold math into my career and my life, somehow. And then, along came graphics, which is just Linear Algebra and Trigonometry visualized as digital art, and then physically-based simulation - discrete approximations of Differential Calculus used to animate those graphics in a physically plausible way, and I found the loves of my intellectual life.
Academically, for me at least, the 2nd time was the charm. As both an Undergraduate and a Master's student, I earned a 4.0 GPA and TA'ed 9 different Computer Science classes (6 as undergrad, 3 as GTA). In April 2015 I was awarded both the Outstanding Graduate Teaching Assistant and The Donald V. Jackson Fellowship by the Georgia Tech College of Computing and in December 2016 I received my Master's degree from Georgia Institute of Technology with a specialization in Graphics and Physically-based Simulation.
Georgia Tech Computer Science Classes I've TA'ed as an undergrad and graduate student
Class | Instructor | Date |
---|---|---|
CS 1050 Introduction to Discrete Math for CS | Monica Sweat | Spring 2011 |
CS 1331 Introduction to Object-Oriented Programming | Olufisayo Omojokun | Summer 2011 |
CS 2110 Computing Organization and Programming | Bill Leahy and Tom Conti | Fall 2011 |
CS 2200 Computer Systems and Networks | Bill Leahy | Summer 2012 |
CS 3451 Computer Graphics | Jarek Rossignac | Fall 2012 |
CS 3600 Introduction to Artificial Intelligence | Andrea Thomaz | Fall 2013 |
CS 4496 Computer Animation | Karen Liu | Spring 2015 (As Graduate TA) |
CS 6491 Computer Graphics (Graduate) | Jarek Rossignac | Fall 2015 (As Graduate TA) |
CS 4496 Computer Animation | Karen Liu | Spring 2016 (As Graduate TA) |
CS 7496 Graduate Computer Animation | Karen Liu | Fall 2016 (As Graduate TA) |
PhD Adventure
In Fall of 2017 I started pursuing a PhD with Professor Karen Liu, focusing on learning an RL control policy for a biped we called ANA (Agent Needing Assistance) to get up with help from another agent (via TRPO), which took the form of a randomly synthesized force vector applied to one of ANA's hands. The policy's state/observation space consisted of this force vector along with the biped's proprioceptive joint state (q, q-dot), and the derived action the policy provided was joint torques for control. ANA's policy was trained along with a value function "baseline" estimator, used for variance reduction, which took a given state and estimated the "value" of that state. Once the policy was trained, with ANA being able to get up with assistance, the value function estimator was then used as part of an optimization process, where for any given (q, q-dot), the assistive force that maximized the value of the state was found, via back propagation, which in turn was fed to an optimization process to derive the appropriate control torques for the assisting robot to provide this force subject to various constraints such as max joint torque allowed. Interesting results can be found here.
To fund my PhD, I was head TA for the Online Master's Degree program's version of CS 6505/6515, the Graduate Algorithms class, where I was solely in charge of the various programming assignments given to the students to implement complex and interesting algorithms and solvers (PageRank, Bloom Filter, Knapsack, Kruskals), which necessitated me designing the assignment requirements and developing the python framework code provided to the students (and full ground truth implementations used to grade) along with a multi-process autograder. I was also solely responsible for grading the 300-400 submissions for each assignment, which consisted of the code and also a 2 page report. Lastly, I also recorded YouTube instructional/"office hours" videos to assist with the projects.
Unfortunately, I lost my advisor to Stanford in the Spring of 2019, (she has a cool lab over there, check it out) and I had a very hard time finding a suitable replacement. As I was trying, the following Fall, I got very sick, (pneumonia was the least of my diagnoses). Apparently spending nearly a decade working 18-20 hour days 6-7 days a week without any exercise and eating like a poor grad student was the recipe for health disaster for me. Who knew? Coupled with trying to find a new advisor, which I absolutely had to do, and get both a new research publication out from scratch and take my quals before the end of Fall semester, which my acting advisor was pressuring me to do, and it all just became too much. I cannot remember a time in my life when I was even close to how sick as I was from the end of November 2019 to the beginning of January 2020.
Needless to say, this forced me to either flat-out leave the program or at least take a Leave of Absence, which I did at the end of 2019. Then Covid-19 happened, and then my wonderful Contingent Worker Research Engineering job with Habitat came along, and that was that, as far as the PhD goes. I still miss it - I truly loved working with Karen (she advised me on various research projects for almost 8 years, nearly every semester) and I have many awesome programs and projects to show for it, not to mention acquiring the skills that made working on Habitat possible, but I don't think I'll ever be able to resume it, unfortunately.