Technical Skills
- 8+ years C/C++: STL, Pointers, Templates, Template Meta-programming, Functional programming, OOP, RTTI, Memory management
- Other Languages: Python, Java, Scala, Mathematica, Matlab
- Development Tools: Linux, Git, CMake, Make, Visual Studio, Eclipse
- Parallel Programming: CUDA and GPU accelerated Image Processing, Computer Vision, Animation
- Image Processing: Convolutions, Filtering, Transformations, Morphological Operators
- Computer Vision: Feature Detection and Tracking, 3D Calibration, Stereo Matching, Pose Estimation
- 3D: OpenGL, Linear Algebra, Animations, Transformations
- Embedded Programming: Arduino, Beaglebone Black, ARM chips, various I2C sensors
- Game Programming: NPC AI, 3D physics, worked on Dead Rising 3
Professional Skills
- Creative and strong self-learner, as seen from numerous personal projects
- Self-driven and ability to work independently with minimal supervision seen in projects and work
- Able to experimentally design and implement different algorithms
- Strong interpersonal skills developed through work, group work and presentations
Work Experience
Magic Leap - Senior Software Engineer (Jun 2016 - Present)
- Working on the embedded algorithms team.
- Writing optimized code to work on a embedded platform in C++14
- Debug bugs in vendor provided compiler
YouTube - Google Inc. - Software Engineer (Apr 2015 - May 2016)
- Worked on the Enforcement Team to implement machine learning classifiers to detect abusive videos
- Coded in C++, Python and SQL like language for data analysis
- Responsible for developing new classifiers for automated processing flagged videos
- Analyzed data and implemented new signals to improve classifier recall
- Wrote design docs to describe how new features and required framework would be implemented
LinkedIn Corporation - Software Engineering Intern (Sep - Dec 2012)
- Part of the cloud team and worked with the graph storage system in Scala
- Implemented and testing different kinds of garbage collection
- Wrote tools to visualize storage and generate metrics to compare garbage collection performance
Capcom Game Studio Vancouver - Dead Rising 3 Software Intern (Jan - Apr 2012)
- Worked in the NPC team and helped deliver boss battles and AI enemies in C++
- Developed specific NPC logic from concept stage to final deliverable
- Communicated with designers and animators to tune and incorporate feedback into NPCs
- Incorporated various parts of the game engine to create AI features
- Worked with developers to help find and fix bugs in the game engine
Sony Creative Software - Media Go Software Intern (Sept - Dec 2010, May - Aug 2011)
- Implemented new features and new slideshow effects in C++
- Led redevelopment of partial slideshow framework to improve performance and fix bugs
- Designed plugins to allow for publishing media to various media services
- Wrote and used code from large code base shared between various Sony applications
Okino Computer Graphics - PolyTrans Software Intern (Jan - Apr 2010)
- Designed and implemented a custom 3D importer for Cinema 4D files in C++
- Importer code utilized the STL, pointers, templates, an OOP design and an external SDK
- Communicated with a third party developer in Germany for SDK support
- Completed the importer independently and with minimal supervision
- Wrote daily work logs and Scientific Research and Experimental Development logs
Projects
ScanMe (Body Scanner) (Sep 2013 - Jul 2014)
- Designed and implemented a body scanning system in C++ to create 3D models of people
- Used a Kinect mounted on a steady cam to obtain model data
- Extended 2D SLAM to 3D in order to generate 3D point cloud of person being scanned
- Generated animation ready 3D models by implementing automated skinning and segmentation
- Used GPU accelerated animations to animate point cloud model in real-time
- Presented the system to classmates and others at a school symposium
GPU Accelerated 2D EKF Slam (Jan - May 2013)
- Implemented a parallelized 2D EKF SLAM in C++ using CUDA
- Implemented GPU based feature insertion, removal and updating the SLAM state
- Used Stereo Matching project in order to create 3D images and later extended to Kinect
- Used Image Processing Library to find and track multi-scale harris corners as 3D features
Tricopter (Jan - Sep 2013)
- Designed, machined and assembled a Tricopter using school machine shop
- Developed flight controller in C++ on a Beaglebone Black
- Implemented PID control and state estimation from IMU data to maintain stability
- Created an Android app to fly the Tricopter over Wi-Fi
- Fixed kernel driver bug for PWM drivers on Beaglebone Black
Virtual Reality Glove (Jul - Dec 2012)
- Designed and created a glove to use hand has an input device
- Recorded hand orientation and finger bend to generate 3D orientation of the hand and fingers
- Made flex sensors for finger input and used accelerometer, magnetometer, gyro to create an IMU
- Experimented with materials for flex sensors and models for mapping sensor values to input
- Used Arduino C to communicate with the sensors and acquire data
- Added serial interface, skeletal animation and particle physics to Image Processing Library
Stereo Matching using the GPU Based Image Processing Library (Jan - Aug 2012)
- Designed and implemented real-time stereo matching to process VGA images at 30fps
- Created own 3D calibration setup to find camera parameters and for image rectification
- Experimented with other stereo methods to find ways to achieve real-time stereo
- Utilizes own image processing library to provide GPU acceleration
GPU Based Image Processing Library (2010 - Present)
- Designed and implemented a real-time image processing library in C++
- Library features 3D model rendering using OpenGL, window management using SFML, and custom designed memory management system
- Library functions designed for parallel processing on the GPU to reduce computational times
- Used library to create Image Stitching, 3D Calibration and Image Segmentation demos
- Used Matlab/Python to prototype various image processing functions before implementing in C++
- Created Python scripts to auto-gen C++ code for template instantiations to improve performance
2D Physics Engine (2009)
- Programmed a physics engine in C++ to simulate physics of 2D polygons and particles
- Developed and optimized algorithm to simulate physics applying self-taught physics
- Wrapped OpenGL into a custom engine to render polygons, points and text
- Designed user interface using OpenGL and SDL
LED Webcam Touchscreen (2009)
- Developed a program in C++ to transform any monitor into a touchscreen with a webcam and LED
- Developed algorithms and formulas for converting LED position into cursor position
- Experimented scientifically to find mathematical models on how objects change size with different distances away from the webcam
3D Graphics Rendering Engine (2009)
- Coded a rendering engine to load and render 3D models
- Developed algorithms to transform 3D polygons into 2D applying self-taught 3D math
- Implemented z-sorting and flat shading while maintaining real-time rendering
- Presented the design and ideas behind the engine to classmates
Education
BASc, Honours Mechatronics Engineering, University of Waterloo, ON, Sep 2009 - Jun 2014
Interests
|
|
|
|
|
|