I've been coding since I was 11 years old. As a result, I've accumulated several projects. Here are my favorites:
CoMo's goal is holding an intelligent technical conversation with an engineer. During my thesis work, I focused CoMo's conversational abilities on data structure manipulations. CoMo held a structured conversation about a data structure manipulation—asking questions by generating sketches and using speech. It demonstrates its understanding by generating a description of the data structure manipulation. This description is turned into C code with the Storyboard Programming Tool that Rishabh Singh developed.
CoMo stands for two things. Firstly, the odd capitalization shows that it sands for "Code Monkey". The idea is that, once you've explained what kind of code you want, this "code monkey" will write the code for you. Second, it references the Spanish word "como," which means "how," and is the word used to ask someone what they just said (as in to repeat it—English speakers use "What?" or "Pardon me?" instead). See the Media page for videos of CoMo in action.
Deskcorder is a recorder for what happens at your desk. Its goal is to provide a simple way to record lectures and convert them to PDF, PNG, Flash, or HTML5. I started it to help me with my sketch recognition research, and its coauthor, Ali Mohammad used it to record and distribute lectures to his 6.01 students. The entire thing is written in Python. In fact, it was my first major Python project and is responsible for me learning the language. Ali and I released it under the GPLv3, so you can get the most-recent copy (currently in-between versions) here.
In this project we made a forklift capable of safely driving itself with the guidance of a human operator giving commands. My primary task in this project was to create the human supervisor's hand-held interface and integrate it with the system as a whole. It was a highly collaborative project that involved working with many other researchers (students and professors alike), so I ended up helping others with engineering and design tasks, and being helped myself.
From a research perspective this was a unique opportunity for me. The forklift used various sensors (LIDAR, cameras, and microphones) to scan and model the world around it. That model was sent to a Nokia N810 internet tablet, which acted as an operator's primary control interface. The tablet was capable of converting speech and sketch input into actionable forklift commands. Combining these natural inputs with the forklift's rich model of the environment made for a unique and interesting experience.
Together, my adviser and I came up with the term "Drawing on the World" to describe what we do on this tablet—we draw on the world as opposed to a canvas or whiteboard. You can read more about this on my page.
Military Coarse of Action (COA) diagrams serve as a pictorial way to communicate the state of a battlefield. COA diagrams are interesting from a research point of view, because of their compositional nature. Each symbol has several attributes (e.g., an alignment) that are visually consistent across symbols. It may be possible to build a parse tree that describes the relationships of these symbols in such a way, that a sketch recognition system could take advantage of that tree's structure to help recognize what was drawn.
The Wii Box is a solution to a simple problem: given an expensive piece of hardware that resides in a very public place, how can access to it be controlled without needing to devote manpower to the task? The answer that a fellow student and good friend Ali Mohammad and I have come up with (with the help of the members of the CSAIL Student Committee) is the Wii Box. A lock box that can be opened by issuing a command through a CSAIL kiosk running CSAIL Debain GNU/Linux.
When I was younger, I used instant messaging services quite often. Over the years I acquired quite a few chat logs; it was my way of keeping a journal. Sometimes I'll look back on my logs and smile (other times I cringe). Unfortunately, as technology changed and improved, chat clients came and left, each with its own logging format. On top of that, I use multiple computers, all with chat logs on them. I wanted to keep them all together, but it was a rather tall order, so I started this project.
My original goal was to be able to transfer between different log file formats, show the logs, and merge files from the same day on different computers. I eventually became skilled enough to realize it would be much simpler to perform this task by writing a shell script (involving simple use of
gawk), and so the project was abandoned.
This project started as a final project for a video game development course I was taking at UCI. I ended up doing most of the work on the project, because I was very excited about writing a 3D game in C++, so I'm responsible for its graphics engine, collision detection, and UI. As one might expect, after the class ended, the project was left to rot on a shelf.