Table of Contents
Steve's Portfolio of Projects and Code
This is a laundry list of various project and code I'm involved with in my dissertation.
It's intended mainly as a reference for me, so I can reuse code on other projects…
If you see something here you think you can use, email me at henderso [at-sign] cs [the-dot] columbia [another-dot] edu
Android Development (General)
- LANGUAGE: Java (Android SDK)
- CATEGORY: Mobile applications
I've done quite a bit of android programming (2D) in my thesis.
Android Server
- LANGUAGE: C++
- CATEGORY: Client/Server
- CODE: Subversion repository (login required)
This is a C++ (VS2005) application I wrote to link an android 2D GUI application with the ARMAR Message server. It uses TCP/IP sockets.
ARMAR
- LAGUAGE: C++
- CATEGORY: Application
- CODE:
This is my main effort. Includes 10000+ lines of C++ code for my main AR application. Also includes a plethora of models and textures. This code touches on many other projects including ARMAR and Opportunistic Controls.
ARMARController
- LANGUAGE: Java (Android SDK)
- CATEGORY: Mobile applications
- CODE: Subversion repository (login required)
This is a 2D GUI I made to control the ARMAR application with the android.
ARMARDisplayController
- LANGUAGE: Java and C++
- CATEGORY: Client/Server, Valve, ARMAR
- CODE: Subversion repository (login required)
This was a Java application (used as a GUI) and JNI backend (used as TCP/IP client) that is used to adjust the cropping and positioning of the video backbuffer in the Valve code.
It communicates with the ARMARMessageServer to allow the user to adjust the video backbuffer, a requirement to get the FOV of the video to match the display.
There are two parts of the ARMARDisplayController.. ARMARDisplayControllerClient and ARMARJavaClient.
The control flow looks like this:
ARMARDisplayControllerClient(java)===jni=⇒ARMARJavaClient(C++)===named_pipe==⇒ARMARMassageServer==⇒named_pipe==⇒ValveHook
This was really test code, as the current control strategy uses Valve key bindings to do the same thing.
ARMARMessageServer
- LANGUAGE: C++
- CATEGORY: Client/Server
- CODE: ARMARMessageServer
The venerable server that holds ARMAR together. TCP/IP socket model. Passes messages to and from my Valve code and various support code, including:
- ARMARController (android controller)
- ARMARDisplayController (a Valve side control to tweak the Valve Hook)
- ValveHook ARTag to Valve bindings
- Optitrack streaming data (not used lately)
- Opportunistic Controls
ARTag (General)
- LANGUAGE: C++
- CATEGORY: Tracking
- CODE:
- Internal Subversion Repository (login required)
- Internal Subversion Repository (older) (login required)
I've done quite a bit of work using Mark Fialla's ARTag. You can get the SDK by buying Mark's book
Calibration
Spent/Spending a lot of time on calibration of trackers and displays. Here's some of the utilities I've built to help.
Wand Calibration
Calibrating the tip and offset of a tracking wand.
- CATEGORY: Tracking, Displays, Calibration
- CODE:
- Internal Subversion Repository (login required)
Computer Aided Training (CAT) Script
- LANGUAGE: Java
- CATEGORY: Training, scripting, object manipulation
- KEYWORDS: Training, scripting, object manipulation, serialization, 4170
- CODE:
- CATScriptUtility - Subversion Repository (login required)
- CATScriptUtility Test Program - Subversion Repository (login required)
This class serves as a utility for reading and writing computer aided training (CAT) scripts. The class is specifically designed to support COMS W4170 (which I was TA'ing), User Interface Design, Fall 2008. A CAT script is a collection of CATScriptSteps. A CATScriptStep is a 3-tuples, with each tuple comprised of {image, title, description]. Each CATScriptStep is designed to be an individual step and shows an image of a task, a title for the task, and a paragraph description. Collectively, this set CATScriptSteps forms the overall training script.
I'm specifically adding this to my portfolio because it uses Java Serialization to store objects.
Image Matching
- CODE: Java
- CATEGORY: Computer Vision
- KEYWORDS: Image, matching, Dendrogram, Laplacian
- CODE: Subversion Repository (login required)
I created this project in COMS W4735. The idea behind this project is to match images based on color, texture (Laplacian) and a hybrid Dendrogram-based clustering algorithm.
Image Location Analysis
- CODE: Java
- CATEGORY: Computer Vision, Natural Language Processing (NLP)
- KEYWORDS: Image, NLP, language, map
- CODE: Subversion Repository (login required)
I created this project in COMS W4735. The idea behind this project is to describe (using text about known landmarks) a user's general location based on where the user clicks on map.
Modeling (3D)
I've done a ton of 3D modeling in support of my thesis. Much of this is for official use only and cannot be shared. But I'm adding what I can here.
Maya to Valve Export
- Language: MEL Script
- Category: Modeling, Valve
- Wiki: here
This was some MEL script I wrote by modifying Prall's export tool. This allows one to create models in Maya and export them to Valve. This includes the ability to export animation.
| |
Opportunistic Controls Vision Code
- LANGUAGE: C++
- CATEGORY: Vision
- CODE:
- Active SVN base (login required)
- TRAC page (login required)
- Old SVN repository (login required)
This is a C++ image processing library for enabling Opportunistic Controls. Uses appearance-based segmentation and the ARTag Library.
Opportunistic Controls Data Tool
- LANGUAGE: Java
- CATEGORY: Data processing
- CODE: Subversion repository (login required)
This is a java tool I wrote to parse data from the original opportunistic controls study. Works with CSV formatted data.
Parallel Football
- LANGUAGE: Java
- CATEGORY: AI, Game Theory
- CODE: Subversion repository (login required)
This was a projects I participated in for COMS W4444.
Parallel Tracking and Mapping (PTAM)
- LANGUAGE: C/C++
- CATEGORY: Vision/Tracking
- CODE:
- Linux Code TRAC (login required)
- Linux Subversion repository (login required)
- Win32 Trunk (login required)
- WIKI:
These are some of my (or others that I've worked on) implementations of Georg Klein's PTAM algorithm.
Linux Implementation
| | | |
Windows Implementaion
Shortest Path Over Time
- Language : Java
- Category : Information Visualization
- Keywords : Shortest Path, InfoVis, Time
- Code : Subversion repository (login required)
This was an information visualization project I was involved with for COMS W4444.
Valve Source Head Tracking
- LANGUAGE : C++
- CATEGORY : Tracking
- WIKI: here
This is some code Ohan and I worked on to control the Valve Source SDK player with a 6 DOF tracker
Visual Computer Lock
- LANGUAGE : Java
- CATEGORY : Tracking, segmentation, vision
- CODE: Subversion repository (login required)
This is a computer lock that uses hand gestures to enter a code.

















