Projects:

Code Base Available Here

Distributed Key Value Storage

(March 2013 – April 2013)

Technologies: Java, Android, Distributed Systems, Multi-Threading
• Designed and implemented a simple distributed hash table based on chord protocol.
• Implemented ring based routing in which nodes are arranged in circle & node stores value for all the keys for which it is responsible.
• Implemented ID space partitioning/re-partitioning to ensure proper load distribution in case of node join/leaves in the system.

Totally and Causally Ordered Group Messenger

(February 2013 – March 2013)

Technologies: Java, Android, Distributed Systems, Multi-Threading
• Designed and implemented a Group messenger application for Android devices using Multi threading and Java Networking that preserves total ordering as well as causal ordering of all messages.
• Implemented vector clock at each process to maintained happened before relationship. 
• Implemented a centralized sequencer to assign totally ordered identifiers to multicast messages so that each process makes the same ordering decision based upon these identifiers.

Multithreaded Web Server

(September 2012 – October 2012)

Technologies: C++ programming, POSIX Thread Programming, UNIX Socket Programming
• Designed and implemented a multi threaded web server 'myhttpd' on the UNIX platform.
• Implemented a queuing and scheduler module on separate thread and dispatcher module using thread pool.
• Implemented Shortest Job First and First Come First Serve CPU scheduling policies to serve the requests.
•Developed a functionality to log the incoming requests and to generate a directory index.

A Distributive File Sharing System

(October 2012 – November 2012)

Technologies: Java programming, Thread Programming
• Designed and implemented a unix command line version of Gnutella Protocol to share, search and download files over the network.
• Implemented a single query search method to search for the file at each peer's shared directory.
• Incorporated a subset of HTTP protocol to facilitate downloading of the files.
• Real time traffic monitoring.

Retrieval, Storage & Analysis of Tweets(Twitter)

(January 2013 - February 2013)

Technologies: Hadoop, Java, Python
• Implementing a Python script to extract real time data from twitter (approx 1 GB).
• Designing and implementing the various MR workflows on cloudera to extract various information from the data. For instance: simple word count, #tag counts, @ counts etc.
• Rendering the discovered knowledge using appropriate visualization methods(Tag Cloud).
• Incorporating a small C++ based script to clean data (remove stop words).

Virtual Memory Manager

(October 2012  – November 2012)

Technologies: C++, UNIX platform.
• Simulation of a virtual memory manager to serve the page requests made by the system.
• Implemented FIFO, LFU, LRU-Clock LRU-Stack, LRU using a bit reference, Optimal page replacement algorithms.
• Comparison of the performance of different page replacement policies with Optimal algorithm.

Distributed Event Coordination System

(November 2012 – December 2012)

Technologies: C++, MultiThreading, UNIX platform.
• Event ordering graph is maintained at a centralized server for multiple clients in a distributed environment.
• Implemented a threadpool for each Incoming client request.
• Implemented "happened before", "concurrent events" & "event no found" relationship between events.

Parallel Breadth-First Search using iterative MapReduce Algorithm

(March 2013 – April 2013)

Technologies: Java, Hadoop
• Design and implemented Map and Reduce functionality for parallel breadth first search algorithm
• Implemented convergence condition based on all the node visited from source node in the graph.

K-Means Clustering on Hadoop

(March 2013 – April 2013)

Technologies: Java, Hadoop
• Design and implemented a framework in java for performing k-means clustering using Hadoop MapReduce.
• Implemented Map and Reduce functionality to convert K-Means clustering into MR parallel algorithms.

Peer To Peer Messenger

(September 2012 – October 2012)

Technologies: Java programming, UNIX Socket Programming.
Designed and implemented a UNIX shell like system to handle multiple tcp and udp connections.
• Implemented thread programming to send and receive data to/from multiple systems simultaneously.