C, C++, Perl, PHP
and Javascript
.
Python, Ruby, Java
and C#
.
Buxfer.com is an online, shared tool for managing your personal and
shared finances. Buxfer helps its users analyze their personal
expenses as well as track and settle debts with friends. All of this
is accessible over the web, through a cellphone, via email, or even
IM!
I, along with my other co-founder, was responsible for the complete design and implementation of the site. The site has seen steady growth despite heavy competition, and has over 100,000 registered users today. As a part of running the business, I have learnt how to develop consumer-facing products, how much usability matters, why latency matters, how to market -- skills which are usually irrelevant in a research environment.
Currently on leave of absence
My research focuses on providing network and system support for distributed multi-party interactive applications with particular emphasis on online multi-player games. My goal is to design scalable, distributed and low-latency architectures for highly interactive games such as First Person Shooters (FPS) like Quake. To this end, I have designed and implemented a distributed middleware (called Colyseus) and modified the popular Quake 2 and Quake 3 FPS game engines to use our substrate for distributing game state across multiple servers or peers. In order to perform efficient distributed object lookups in Colyseus, I designed and implemented a novel routing protocol called Mercury which supports multi-dimensional range queries in peer-to-peer environments.
Analysis of the BitTorrent file distribution network under a wide variety of realistic environments. We find that the system performs near-optimally with respect a number of metrics including mean download time. Also designed and implemented a new scalable file distribution protocol code-named Cascade.
Some other work under an NDA.
Worked on the design, implementation and evaluation of a generic peer-to-peer network architecture. Developed a distributed directory search application providing seamless peer-to-peer access across DSML/LDAP servers distributed over various administrative domains.
Worked with Dr. Alok Aggarwal on the VLSI complexity of generalized adders. Proved tight lower bounds on the Area required by these adders for any given time T.
In this project, we build mechanisms to help an ISP network detect if its network as a whole is under attack or if a significant portion of its network is carrying traffic aimed at bringing down an external destination. In our scheme, routers in the ISP network construct profiles or fingerprints of traffic using stream-sampling algorithms. These fingerprints are used to identify anomalies and trigger suspicions about various flows. The suspicions are re-inforced by other routers to respond uniformly using RIO-based preferential packet dropping. Joint work with Aditya Akella, Prof. Srini Seshan and Prof. Mike Reiter.
The goal of the project was to answer the following question: is it possible to redesign the traditional rigid protocols to take on very different operating modes when faced with different environments? We presented a case for such multi-modal protocols in our paper. Specifically, we discuss multi-modal reliability and routing. We show the feasibility of designing multi-modal protocols by describing how these protocols can make operating mode decisions and switch modes without additional overhead. Joint work with Aditya Akella, Suman Nath and Prof. Srinivasan Seshan.
Traditional methods for debugging distributed programs are ineffective because the asynchrony and unpredictability of the interconnecting network results in system state which is hard to reproduce. In this project, we designed and implemented a trace and replay based distributed debugger for the Java RMI system. In the replay phase, only one component is re-executed while the rest of the system is simulated using the traces recorded in the record phase. We thus manage to give a one-machine debugging perspective to the programmer. We found that the time and space overheads for debugging are acceptable. Joint work with Vahe Poladian.
This project focused on designing and implementing a general-purpose interface between the two halves of an application that allows arbitrary computation to be placed on reconfigurable hardware. Our interface was based on compiler-generated stubs which allowed placing arbitrary procedures on the reconfigurable fabric. This was a significant departure from previous approaches that allowed only simple, call-free computation or leaf procedures to be placed on the reconfigurable hardware. Joint work with Mahim Mishra.