Languages: C++, AppleScript, MySQL
Libraries: Sockets, OpenCV
Platforms: Mac OS X, Ubuntu (Linux), Arduino Mega 2560
This project is a part of Build18, a week-long ECE hackathon organized by the ECE department at CMU. We're given one week - the first week of Spring semester - to build whatever we want and then present it.
I worked on this with four other ECE sophomores. Here's the gist: the system recognizes faces and gives some sort of a hardware output (hence named HUMI - as in "who am I" and HUman Machine Interaction).
This needs a facial recognition algorithm, a database of faces to both train the algorithm and store a person's preferences (such as room lighting or playlist) and an Arduino Mega 2560 for the output. The facial recognition algorithm used is a variation of the eigenface algorithm.
When a member is added to the database, multiple pictures of that member are taken and used to train the eigenface algorithm. Then, whenever a person is standing in front of the camera, the algorithm will take a picture of that person and compute the probability of him being the member stored in the database. If that probability is satisfactorily high, the green LED light on the Arduino Mega 2560 becomes on and the member's playlist is retrieved from the database and played on the Mac!
Two computers are used in a server-client fashion. The facial recognition and output of personal preferences is done on the client wherease the database is stored on the server. The two machines are communicating via TCP/IP sockets. So, the client recognizes a face, sends a request to the server and the server responds with that person's preferences. This can allow a remote and scalable database and a mobile client such as a Gumstix or Beagleboard to run the facial recognition.
Languages: C and MySQL
Libraries: Sockets, POSIX Threads
OS: Angstrom (Linux)
This was the first time I ever saw a quadrocopter and the first thing I thought was "Man, I gotta have one". I had just graduated from high school and had some free time so some friends and I decided to build one from scratch! We ended up donating it to our high school.
It's controlled by an iPhone/iPad. Tilt the device and the plane flies in that direction. My job was mainly to write the software that would run on the Quadrocopter. Here's a summary of what I did...
Wireless Communication: The iPad and the drone communicated over TCP/IP so I wrote the code that would go on the drone and in the iPad app using sockets programming. Had to create separate threads to allow bi-directional communication. A modification of this code can be found on github.
Hardware: Angstrom (Linux) was installed on a 600MHz Gumstix Over Fire. Then, serial communication was used to obtain data from the 9 degrees-of-freedom (DOF) Inertial Measurement Unit (IMU). Finally, the microprocessor instructed the serial servo controller (SSC) to control the thrust provided by each of the 4 motors.
Control Algorithms: A stripped down version of the PID controller was used which compared the drone's roll, pitch and yaw values to the roll, pitch and yaw values of the iPad (which the microprocessor received over Wi-Fi).
Visit the project site if you're interested.
Role: Lead Back-end Developer
Technologies: Django, Jinja, dotcloud, MySQL
Flaggy is an iPhone app that makes location-sharing fun and non-creepy! What sets Flaggy apart from other location sharing apps is that the user has complete control over who gets to see he/she is and when it can be seen by others. Users share their location simply by hitting a button on the map. They also log in through Facebook and choose which of their friends they want to follow. Users also set a distance sensitivity meter (between 0 and 1 mile) so that if any of their friends are within that distance, Flaggy notifies them! Flaggy also becomes interesting when users get to 'poke' the friends they are following, nudging them to let them know where they are.
I worked on Flaggy with two other school mates: Darren Lane and Ilter Canberk. As the only back-end developer, I worked on developing the Relational Schema, writing a HTTP CRUD layer on the database and sending emails, iPhone notifications and text messages to respective users.
Role: Lead Back-end Developer
Technologies: CakePHP, LinkedIn API, jQuery
Platforms: Desktop, Mobile, iPhone
Built Flypn in 3 weeks with a close friend (currently attending UC Berkeley). We had been to many conferences and trade shows and one thing we absolutely hated was the trash generated by flyers in such events. A lot of flyers distributed often went to waste because they were inconvenient to carry or just irrelevant. So we thought we could change that by making Flypn.
Flypn allows users to log in through their LinkedIn account and upload their flyers. So if you met someone who you want to touch base with after an event, you can easily find their flyer and the respective LinkedIn profile, allowing you to continue your discussion right where you left off!
Flypn was built using CakePHP and the LinkedIn API was also used.
Sanchit Bareja and Nikhil Ravikumar built the iOS app for Flypn.
CMU Happy Hours
Technologies: Django, Jinja, dotcloud
CMU Happy Hours is a small project I started just to make finding office hours a less painful process. Because students wanting to attend office hours are often in need of urgent help, they should simply be able to write their course number or instructor's names and get a list of relevant office hours they can attend.
So to make life easier, I wrote CMU Happy Hours, a Django web app deployed on dotcloud with a MySQL database. At present, I'm manually adding office hours to the database but once I figure out a reliable authentication system for instructors, they should be able to update their own office hours. Hope to find enough time to turn this into a valuable tool.
Technologies: Noir, Amazon EC2 and S3, Twitter Bootstrap
Huffman coding is an algorithm that is used for lossless data compression that relies on the frequencies of characters in a string to determine a compressed bitstring that it can be represented by. This is done by first generating a Huffman tree where the leaves of the tree are all the characters in the string. Each character's corresponding bitstring is determined by traversing down the tree to that character where each left traversal represents a 0 and each right traversal represents a 1.
I wrote this app in Clojure and chose the Noir web framework to turn it into a web app. Amazon's Elastic Beanstalk is used to deploy this web app. This was done by making a WAR file from the Clojure app and then pushing that file to the S3.