Hello! I am Salar Khan, a passionate developer and a Computer Engineering graduate from University of Toronto. I admire working with teams on projects and am very efficient in delivering products and meeting deadlines. I have been dedicated & motivated to developing flawless software programs. Over the past years, I have put my skills in programming to use in game development, engineering research, application development, machine learning, computer graphics, and code optimization. My interest goes beyond just being given the tools to develop where I like to develop tools myself from scratch. I think in both low level and high level programming languages to solve problems. In addition to being a strong programmer, I also adore researching in modern physics and making 3d models & animations in blender as a hobby. With my enthusiasm, I also like to teach others as it is always a gratification for me to spread the knowledge and advocate for open source development. It is always my pleasure to tackle new and innovative challenges in the real world.
2017 - 2022
University of Toronto
I studied at the Edward S. Rogers Sr. Department of Electrical & Computer Engineering at University of Toronto. During my time here, I grasped vast knowledge of hardware and software systems, in both practical and theoretical realms. Collaborating on various projects along with team-members, clients, and managers has enhanced by inter-personal skills and professionalism. My program also offers an AI minor with the CE major degree which requires you to take additional AI and ML courses. I adore Machine Learning and AI which intrigued me to persue this minor and get a deeper understanding of data science. My final year capstone project was also a machine learning project where I along with a team of 3 other members created and optimized a BERT based model that could decipher the sentiments in a text.
May 2020 - August 2021
During my third year I was looking for a PEY (Professional Experience Year) position, and I was hired by AMD. However, my work with them went so well that my contract was extended from 12 months to 16 months. During my work here, I was involved in the development of a 3D API tool, running manual tests on it, and maintaining the automated testing scripts and it's nightly test pipeline in Jenkins. The tool was written in C/C++ which is my most strongest language, so I was well able to contribute to the source code by adding new features, fixing bugs and regressions, and giving slight performance improvements. The automated testing scripts were written in python, so this made it very easy to setup testing environment on any system. I was able to improve the automation scripts by adding some new features, creating new job for it on Jenkins, and improving the format of email report sent. The tools used involved alot of use of Hardware 3D API's such as Direct3D and OpenGL. I was succesfully able to use the concepts I had learned in my Operating Systems course to be put to good use in this role. The whole experience was work from home since it was during the peak days of COVID-19 pandemic.
May 2019 - August 2019
During summer of 2019, I worked as an intern at a game development company called “Spark Game Studios” for 4 months. As an intern, I actively worked in an agile android app development environment on three major projects. All 3 projects were programmed in C#, using the game engine Unity3d. The first project was creating an editor for a traffic AI system enabling developers to create a traffic AI system on any environment efficiently and with reduced time. The second project was proof-of-concept to develop a prototype multiplayer game called “Space Rumble” in both WAN and LAN using API’s PUN2 and UNet respectively. As a third project, this proof-of-concept was utilized to add multiplayer feature to a shipped game called “Mega Ramp”. I was able to fully develop and test this feature ahead of deadlines.
May 2018 - January 2019
During summer of 2018, I worked as a research associate at University of Toronto. In this job, I worked under the supervision of academic faculty and PhD research associates in the Department of Civil and Mineral Engineering for software designing and development. I developed a software application with user friendly GUI which could be used by civil engineers to design roads and simulate traffic over them.
September 2016 - April 2017
During my last year of high school, I was appointed as the TA for A level physics. My role as a TA was to host tutorial sessions in which I could teach students concepts of difficult topics in a more intuitive way. I also had the opportunity to mark class quizzes and teach the class at the absence of the professor.
This was a competitive coursework project that I developed during second semester of second year at UofT. I worked on this project in a team of 3 members. The goal was to create a GIS application with a similar functionality to google maps. The backend code consisted of fetching map data from XML files and storing them into various data structures. The use of data structures optimised and enhanced the performance of Get methods. Using the Get methods and a C++ graphics library called "EZGL", different layers of the map were drawn and graphical details at different zoom level were controlled. The application also allows for finding shortest path between any two given intersections. The intersection input can be typed into search bars or marked on the map itself. Shortest path was determined using Dijkstra's Algorithm with A* heuristic to increase performance.
This was my second project during my internship at Spark Game Studios. Purpose of this project was to establish a proof-of-concept for multiplayer game development. Before I could add multiplayer feature to a shipped game, I developed this multiplayer game as a prototype and tested different scenarios in order to get the full understanding of client-server interaction. Hence, Space Rumble was my first ever successfully developed multiplayer game! The in-game menu allowed users to choose a character and either host a game or join any available rooms hosted on the network. During gameplay, the goal was to blast other players off the ring. Each game could have a maximum of 8 players playing.
This project was divided into two parts i.e: WAN multiplayer and LAN multiplayer. LAN multiplayer was implemented by using Unity3d built-in network API called UNet. After success of LAN, I successfully implemented WAN multiplayer using an external API called PUN 2. This API allowed the use of a server provider called Photon which was used to transmit game multiplayer data.
Pixel Painter was the final project for a course called “Digital Systems” at University of Toronto. I developed this project with a lab partner. The goal was to build upon the basic knowledge of digital systems to create a simple pixel painting program for a 160x120 resolution monitor. This was programmed in Verilog on an FPGA DE1-SoC board. I researched open source module for transmitting information over VGA pins and converting mouse inputs over PS/2 controller to mouse state data. A RAM module was programmed in which I stored pixel data. Using inputs from mouse and onboard buttons, I programmed the modules to interact with each other to perform the following functions:
-left click would plot a pixel on current cursor location
-mouse wheel would allow changing painter colour
-right click would allow to create rectangle shapes
-button on the board would clear the display
Each time the cursor would change its location, the pixel in the old location of the cursor stored in the RAM module would be replotted and the cursor would be plotted at the new pixel location. Every instance painting was invoked, the pixel data in the RAM module would be updated with new values. The colour depth used for each pixel was 8bit.
While working as a Research Associate in the Civil Engineering department at University of Toronto, I worked on a project which dealt with study of highways. My role in the project was to create a user-friendly software program which would allow civil engineers to build roads and manage lanes on the roads in a 3-D environment. I used Unity3d for developing this program. It consisted of a scene in which the user could walk and fly freely. An easy to use User Interface could allow the user to click on and edit empty roads. Editing the road would give an orthographic top view of the road. It would open a panel in which the main menu would allow to add a new lane or remove current lanes of the road. If user wanted to add a new lane, they would specify an index number where they wanted the add the lane, chose the type of lane, chose the direction of traffic flow, and specify a width for the lane. Before the user could exit the panel, they were prompted to fix any remaining width on the road. This could be done by either scaling the road or scaling the barrier to take up the remaining width. After the road completion, the user could exit the panel and go back to moving freely in the 3-D environment to edit other empty roads. The concept of this program was similar to that of Minecraft. Moreover, the back-end data structure used to store info about the roads could be saved in a .city file using JSON. The .city file could then be reloaded to continue modification of roads. With the success of this prototype, CAD models of cities were imported to the program over which empty roads were created so that civil engineers could get a 3-D visual representation of how different lanes will look like on different roads of a specific city.
In addition to Road Builder, I also implemented a way for civil engineers to simulate traffic over the newly designed lanes. This project used two sliders to adjust Average Traffic Speed and Traffic Density. This project was to be integrated with Road Builder, with a purpose of allowing civil engineers to simulate traffic on specific roads with multiple control factors. Average Traffic Speed slider could be used for controlling the average traffic speed of the cars being simulated on the road. Traffic Density slider could be used controlling number of cars on the road and for knowing how traffic would be affected during rush hour. Moreover, civil engineers could also use this program to study the frequency of collisions on a road and test different speed limits in order to obtain safe speed for the road.
Due to my experience in traffic simulation projects while I was a Research Associate, the first project assigned to me during my internship at Spark Game Studios was to create a Traffic AI Editor. Unity3d platform is not only used for programming game mechanics, but also allows for programming of the Unity editor by developing custom window with customized buttons to allow for faster game development. Programming an editor is useful when objects are required to be placed in the environment according to some mathematical pattern. Hence, I was asked to develop an editor for the traffic AI system package. The editor allowed developers to easily place joints called “Ways” on the intersections of the roads in the environment and link these “Ways” with their desired number of nodes and desired traffic flow. The position of the nodes could be adjusted to follow the line of the road. If the road was a straight road, only the first and last node position had to be adjusted and a button would be clicked to equally space the nodes in the group straight between the first and last. If a developer wanted the delete an entire path, rather than deleting each node they could just click on one node of the node group and then click the delete path button. A “Find Shortest Path” button was added for developers know shortest path between intersections so that they could adjust the AI driver of some vehicles to follow shortest path to their destination. If the developer was creating the traffic AI on a hilly environment, the “Align selected nodes with road below” button would be useful to automatically adjust the Z position of every node to properly align the road below it. Developers could set the node widths and speed limit of multiple selected roads which would allow for implementing the AI on roads of different width and types. For novice developers, the “Create AI controller” button would automatically instantiate a single “Way” which the developer could start duplicating and placing around the environment at every intersection. Without the use of this editor, developers would have to face the inconvenience of manually adding new nodes in the hierarchy, assigning node groups for a path, assigning nodes to intersection, and adjusting the position of every node & way to fit the setting of the roads. My editor made creating traffic AI on any environment more convenient and reduced development time.