• Home

Select Undergraduate Projects

Senior Design Project: CRATER

We developed CRATER, a Crowd Sensing Application To Estimate Road conditions. CRATER is a smart- phone application that opportunistically measures acceleration when it finds itself on the road in order to map and measure the locations of potholes and speedbumps. It does not require input from users and reports detected potholes and speedbumps to a cloud-hosted application engine which stores partially processed data received from cellphones of participating users and jointly processes it to obtain a better estimate of road conditions. The information is published in map form on the web. The maps allow citizens and municipal authorities alike to spot potholes, road segments in need of repair, and imbalances in infrastructure main- tenance efforts across cities. Road tests demonstrate that CRATER succeeds at correctly detecting roughly 90% of potholes and 95% of speedbumps, while generating false alarms only about 10% and 5% of the time, respectively.

A link to the final project report.
A link to the code of the mobile app.

Mazewar: A Multi-Player Game

This is a slightly modified version of CS244B Mazewar which is a distributed, multiplayer game that allows each player to control a rat in a maze. A player receives points for tagging other rats with a projectile and loses points for being tagged.

A link to the code.

Reliable UDP

The goal of the project was to apply checks and constraints at the application layer to make UDP reliable. The checks were designed to deal with varying probabilities of packet drops, duplication, errors, re-ordering and any combination of the aforementioned. Since UDP is too reliable to test the correctness of the code (oh, the irony!) "BadNet" classes were provided emulating all possible faults that could occur during data transmission. The assignment was done in Python, and was tested with files of size 5 MB minimum.

A link to the code.

Digitizing Blood Donations

Blood drives may be common in universities and colleges in Pakistan, but there is a substantial lack of awareness amongst the general public about the importance of donating blood. The purpose of the site was to allow a central authority to obtain information about donors and supply it to blood banks or patients directly for cases where they urgently need donations. This would be especially useful in instances where the blood group is rare or a large number of donations are required immediately. This project was done on a voluntary basis for Revolution Flame and is still a work in progress.

A link to the site.

Image Comparison using SSE Instructions

I first came across SIMD instructions in my Computer Architecture course. The idea of using vector registers to improve performance seemed ingenious in its simplicity. I wanted to evaluate how fast SSE instructions could be in a realistic scenario. An application that could use data-level parallelism was image comparison. So I wrote three versions of the same application: one in Assembly, the second with SIMD instructions in Assembly, and the third with SIMD instructions with C++. On average, SSE instructions with Assembly ran twice as fast and SSE instructions with C++ ran almost thrice as fast as Assembly alone.

A link to the code.

Front-End Compiler

A case-study on compilers was discussed as part of our Software Construction course in undergrad. The assignment was restricted to building only the front-end due to a lack of time. The lexical, syntactic and semantic phase were implemented to produce a symbol table for code generation from a file of C++ code.

A link to the code.

Designed by W3layouts