I have worked on some cool robotics projects during my years at the University of Pennsylvania, and I continue to do so in my spare time.
We have recently published our work on Embeddability of Modular Robot Designs, jointly written with prof. Sanjeev Khanna of the Computer Science Dept., and Tarik Tosun and prof. Mark Yim of the Mechanical Engineering Dept., in IEEE's International Conference on Robotics and Automation. This is a flagship conference in the field and is considered a premier international forum for robotics researchers to present cutting edge advancements.
In our paper, which is succinctly summarized in the video on the left, we address the problem of deciding automatically whether a given modular robot design can simulate the functionality of a seemingly different design. We first introduced a novel graph representation for modular robots and formalized the notion of embedding through topological and kinematic conditions. Subsequently, we developed an efficient algorithm that decides embeddability when the two involved designs have tree topologies. The algorithm performs two passes and involves dynamic programming and maximum cardinality matching and is provided as an open source tool to the research community. You can find links to the code and paper here.
I have also developed a suite for autonomous navigation of quadrotors in synthetic 3D environments as part of a graduate-level course on advanced robotics. Not terribly novel, but a lot of fun: your quadrotor is equipped with a pair of stereo cameras and you need to find your way through various mazes.
Among others, I learned about and implemented SURF to determine feature correspondence between stereo images, RANSAC to discover which points best described the translation and the rotation of the cameras, A* and space discretization to find a collision-free path through the maze, and fusion of noisy velocity and acceleration (sensor) info with info stemming from a vision-based global localization scheme to estimate position and yaw. The result was then fed to a controller that emerged from the linearization of the motion and motor models in near-hover state and... voilà!
I'm very interested in algorithms and computer systems for efficient big data analytics, and their applications to online social and media-sharing networks. To that end, I'm working full-time at Tubular Labs to index and offer analytics on all video content ever posted online, empowering artists, studios, multi-channel networks, as well as popular brands and tech giants, to take intelligent decisions on the rough and ever-changing terrain of online video. In my spare time, and prior to joining Tubular, I've been collaborating with Prof. Victor Preciado and his group from the University of Pennsylvania on a few like-minded research projects.
At Tubular, where I am supported by and working with a wonderful team of people, my main contributions pertain to the backend processes that populate the dashboard shown in the accompanying pictures. Users can specify and track a list of up to ten million videos, and subsequently, they expect to see how this group evolves over time. I created separate tools to help debug existing issues when I joined, and over the following months I cleaned up and re-architected the main job to be nicely abstracted and easy to modify, extended it to handle multiple platforms (initially it was Youtube only), and optimized it to process over 80% of the customer load in three to four hours through a careful analysis of usecases and a reduction of the underlying algorithmic problem to bin packing. Here, I've become familiar with the very interesting technologies that comprise our stack, such as ElasticSearch, Impala, HDFS, Cassandra, Tornado and REDIS. Not to mention the joy of working on so rich datasets!
Before joining Tubular, I was working with Prof. Victor Preciado on evolving social networks, as part of my Ph.D. studies and my research fellowship at the University of Pennsylvania. Our main focus was on mapping global spectral properties of large-scale social networks that evolve over time, such as Facebook, Wikipedia interactions, etc., to local structural properties, and then predict evolution based on this mapping. Among other responsibilities, I researched, designed and implemented a fast, scalable tool for analysis and tracking of structural properties in C/C++, and developed simulations based on evolution models proposed in the literature and compared their synthetic data to actual data to identify points of failure. We then came up with a novel evolution model, as well as user and community similarity measures. A preliminary version of this research, enriched with more algorithmic directions by Prof. Sanjeev Khanna, resulted in NSF BIGDATA grant #1447470 ($500,000). I am now collaborating with Victor and his group on a few cool, new projects that are still on stealth mode!
Below, you can find code & utilities that I'm sharing either in the hope that they will be as useful to other people as they were to me (djembe, dithesis, audin) or as samples of my early work in C (rssh, fint, mustream).
Other projects that didn't make the cut include teaching undergraduate and graduate courses at the University of Pennsylvania and some software I developed while at school.
My teaching experience at the University of Pennsylvania comes from being a Head TA on CIS320: Introduction to Algorithms, with Prof. Sanjeev Khanna during Spring 2014 and CIS505: Software Systems (Fundamentals of Distributed Systems), with Prof. Matt Blaze during Spring 2013. There I led teams of up to 6 Teaching Assistants to manage classes of up to 193 students, I administered the class back-end, setting up homework submissions on headless UNIX servers, SSH keys and plagiarism detection, I developed Bash scripts for automated software grading, roster management and grade mailing, I designed plenty of homework problems and exams for CIS320, and finally, I supported students extensively (63% and 80% of instructors' responses on Piazza, respectively). I was also a TA on CIS121: Introduction to Data Structures and Algorithms with Prof. Kostas Daniilidis during Fall 2012, where I taught weekly recitations to a class of 7 and lectured occasionally a class of 105 students (e.g., see the midterm review session I designed and presented), among others. I was evaluated by students with 3.5 out of 4 on overall quality as an instructor; compare to an average of 2.81 for the rest of the team.
Finally, I've done some cool C programming projects for classes, like a Unix shell, an interpreter for a first-order functional language, a multi-threaded music streaming server over HTTP, and a compiler for a procedural language, which also included a custom-written Assembly x86 library of standard I/O functions. I've also designed and developed a full-scale distributed chat system over UDP (see attached picture for a screenshot!). This consists of seven threadpools, where each threadpool is responsible for a specific functionality, and threads between different pools communicate with each other through priority queues. Briefly, the functionalities implemented by the pools are: check for alive peers, conduct elections and implement the bully algorithm, exchange coordination messages reliably with another peer over UDP using ACKs and exponential time-outs, transmit chat messages to other peers (FIFO fully-ordered multicast). It also features a super cute ncurses text-based user interface.
Have a question or a great new idea and you're interested in collaborating? Feel free to drop me a line and I'll get back to you as soon as possible.