About Me

I am an undergraduate computer science student at the University of Toronto. I have had an interest in software development from a young age. It has grown into a real pastime for me and I joined several related clubs in high school (Arduino, Super Computing, and Robotics). As a result I have published four android applications and I have also worked on several other projects in my spare time. Some of these android applications and projects can be seen below in the "Projects" section.

I believe that most things can be done if you dedicate the time to it. Contrary to popular opinion, most people are not born "gifted". They have to dedicate hours upon hours practicing to get to where they are. I think that this is the case for most things. For example, think about university. You can pass your courses by putting in a minimal amount of time and effort, but to really excel, you need to dedicate as much time as you can to a course. The people managing to get 90% and above generally aren't geniuses, they either dedicate the time to learning the material and practicing what they learned or they've done so in the past. The best way to dedicate the time needed to completing an assignment is to be genuinely excited to work on it. That is how you produce the best quality of work.

Projects

Android Applications

The Space Maze

Java, LibGDX, Box2D

Description
The Space Maze is a game where you control a blue spaceship and you must navigate your way to the end of a maze. There is an enemy (red) space ship that will try to get to the end before you. The maze is randomly generated each time you play so that you have a different experience each time.

Technical
The space maze uses LibGDX as its framework for rendering graphics, and it uses Box2D for movement and collision. The maze is generated using an algorithm similar to the Recursive Backtracker found on Jamis Buck's blog. The star texture used on the skydome is generated by distributing clusters of stars over a background generated using a custom implementation of Perlin Noise.

Coin Collector

Java, RenderScript

Description
Coin Collector is a game where you play as a space ship that has to gather coins. Each coin has benefits or consequences depending on the type of coin (indicated by its colour). The game starts by giving you ten seconds of time. For each coin you collect, you will receive or lose points or time. When the timer reaches zero the game has ended and your score is displayed.

Technical
Coin Collector is built on top of the Android API. It does not use any other libraries to handle graphics rendering. The star texture is generated using a similar method to Space Maze (distribute the dots and use Perlin Noise for the background), but it does this using RenderScript. An advantage of RenderScript is that it uses parallel computation resulting in faster image manipulation.

Derivative Calculator

Java

Description
Derivative Calculator is an application that allows the user to input a mathematical function, then it outputs the derivative. Some additional features include calculating the nth derivative and plugging in a value to see the result of the calculation.

Technical
Derivative Calculator uses a binary tree. Each node of the tree is either a calculation (plus, minus, times, divide) or a function (power, trigonometric, etc...). A base function of f(x) = x is used as the most simple function. For example: derivative of sin(x) would be evaluated to 1 * cos(x) by using the chain rule.

Polynomial Solver

Java

Description
Polynomial Solver is an application that can compute the roots of a given polynomial function.

Technical
Polynomial Solver uses a combination of newton's method and synthetic division to find roots and reduce the polynomial.

Arduino

LED Cube Designer

C++, Arduino, Irrlicht

Description
LED Cube Designer is a desktop application that allows you to create designs and animations to be displayed on an arduino powered LED cube. It currently supports two types of 4x4 cubes. The first type is a standard cube where each LED is on or off. This cube is based off of an instructables tutorial. The second type of cube came in a kit with an LED controller and an API, it is an LED cube that can show any colour.

Technical
This application was built using Irrlicht which is a 3D rendering library. When the user designs the cube they can export the design/animation as Arduino code which can then be uploaded to the Arduino.

NeoPixel LED Strip Message Board

Arduino, Python

Description
NeoPixel LED Strip Message Board is a message board built out of rows of LED strips. It can display a message as horizontally scrolling text.

Technical
A "font" is defined as a series of 0s and 1s in a text file. A python script reads the text file and converts each letter into an array of bytes. Each bit in each byte defines which LEDs should be on or off to display a particular letter. An offset and buffer is used to scroll the text.

Web

PanPar Development

HTML, JavaScript, CSS, PHP, SQL, Bootstrap

Description
This is a website that I created to display my android applications. I ended up adding a couple of other projects as well, especially ones that are multi-platform (eg. Android and Web).

Technical
panpardev.com uses a MySQL database to store the information regarding each application. PHP is used to access and display the information. This allows for me to easily update the page.

Map Creator / Route Finder

JavaScript, C#, HTML

Description
Route Finder
Route Finder is a web application that allows you to choose two destinations on a map then it displays the route.
Map Creator
Map Creator is a desktop application that allows you to create a map that can be used by Route Finder. You start by loading an image to use as the basis for a map and then add the appropriate start/end points.

Technical
Map Creator exports a JSON file that contains the appropriate map data. Route Finder loads the JSON data and performs Dijkstra's algorithm on it to find the shortest path between the source and destination map nodes.

Desktop

Procedural city

C++, Lua, OpenCL, Irrlicht

Description
This is an application that procedurally generates a city. There are no pre-made assets such as models or textures. They are all generated when the application starts. There are no "practical" uses for this project as is. It can be used as a base for other projects; for example, in the future I plan to make a visual traffic simulation using Procedural City as a basis.

Technical
Procedural City uses the Irrlicht 3D library to render models. The models are generated by Lua scripts. The thinking behind using Lua was that the buildings and roads could easily be modified in future projects. It also allows for experimentation. The original Implementation of the texture generation was done by using shaders, I changed this to use OpenCL because the shader implementation had a negative effect on the frame rate. Now the textures are generated using OpenCL when the application starts. It uses more memory, but the frame rate is considerably better. A simplified version of the city generation algorithm is: generate road network, generate population density map, place buildings in the road network based on population density.

Audio Visualizer

C++, SFML, FMOD

Description
Audio Visualizer is an application that visualizes music using a variety of different effects including the classic bar graph and some unique effects as well.

Technical
Audio Visualizer uses SFML for graphics, and it uses FMOD to load and analyze audio files. I made a simple GUI system based on SFML for the selection form.

Programming Languages

Canvas not supported!