| |
 |
songsmith (with ian,
sumit, and the MSR
ADT)
Songsmith
allows anyone to experiment with music creation using only a microphone,
and provides an “intelligent scratchpad” for songwriters to
explore new song ideas.
|
 |
patient-friendly information displays (with lauren,
laura,
amy,
desney,
greg,
eric,
and justin)
Electronic medical records are increasingly comprehensive; however, this
information is not typically accessible to patients, who are frequently
under-informed and unclear about their own hospital courses. In this work, we
propose and evaluate a design for in-room, patient-friendly information displays.
|
 |
Sensing Gestures Using the Body as an Antenna (with
Gabe,
Shwetak, and
Desney)
Home environments frequently offer a signal that is unique to locations and
objects within the home: electromagnetic noise. In this work, we use the body
as a receiving antenna and leverage this noise for gestural interaction.
|
 |
ClassSearch (with neema,
Merrie,
Mary, and
Nathalie)
We present the ClassSearch system for shared awareness of Web search activity
in classroom environments. Through this prototype, we explore the use of
social learning — improving knowledge skills by observing peer behavior
— in the domain of Web search skill acquisition.
|
 |
Skinput: Appropriating
the Body as an Input Surface (with chris and
desney)
Skinput provides an always available, naturally portable, and on-body
finger input system, using a novel sensor to identify the location of
finger-taps on the hand or forearm. |
 |
marathon training log
In 2010, I ran my first marathon, which wasn't nearly nerdy enough, so I
wrote code to crawl my training logs, render images of my routes, and
generate a little Web page to archive all those
miles for posterity.
|
 |
muscle-computer
interfaces (with scott,
desney, and
ravin)
Muscle-computer
interfaces will someday allow users to directly control computer interfaces
via muscle activity, without manipulating objects in the physically world.
Our initial work in this space explores fundamental techniques for processing muscle activity.
|
 |
User-Specific
Training for Vocal Melody Transcription (with Andrew and
Sumit)
Real-time vocal transcription doesn’t quite work yet; we propose that user-specific
training will get us one step closer to the elusive voice-to-MIDI system
|
 |
Computational Creativity Support
2009 (with jimmy)
“Computational Creativity
Support: Using Algorithms and Machine Learning to Help People Be More
Creative” is a one-day workshop at CHI 2009. We're also hoping to use
this as a starting point for computationalcreativity.org,
which we hope to develop into a central destination for topics related to
algorithmic support for creativity in the arts.
|
 |
Dynamic Mapping of
Physical Controls for Tabletop Groupware (with Rebecca
and Merrie)
This project
explores the integration of physical controllers into a multi-touch
environment, to leverage the collaborative benefits of touch-based
interaction while supporting high-precision tasks.
|
 |
Data-Driven
Exploration of Musical Chord Sequences (with Eric
and Sumit)
This project
explores the algorithmic basis for a user interface allowing intuitive
blending of genre-based statistical models for rapid exploration of chord
sequences.
|
 |
mysong (with ian
and sumit)
MySong automatically generates chords to accompany a vocal melody, and lets a
user with no knowledge of chords or harmony manipulate those chords with
intuitive parameters.
|
 |
superbreak (with a.j.
and brian)
superbreak adds
hands-free interactivity to traditional ergonomic break-reminder software.
|
 |
searchbar (with merrie
and gina)
searchbar is a
browser history centered around search topics and queries, instead of
the not-all-that-useful constructs like domain and date that current browsers
use to organize web history.
|
 |
surgical simulation
my phd work
focused on haptics and physical simulation for virtual surgery, specifically on building an environment for simulating bone
surgery.
|
 |
neural prosthetics
i worked with cyberkinetics and brown on
clinical neural
prosthetics. I present some introductory
concepts and code here.
|
 |
chai 3d (with the chai
team)
chai 3d is an open-source scenegrpah
library for haptics and graphics.
|
 |
evaluation of haptic
rendering systems
standardized evaluation
of haptic rendering systems is a data and analysis repository for evaluating the realism of haptic rendering.
|
 |
haptic
mentoring
This project explored the use of
haptics to teach force-sensitive motor skills. More
details are available in our WordHaptics
paper.
|
 |
algorithms and data
structures for haptic rendering
this technical report
describes a few haptics-related tricks used in my thesis work.
|
 |
preparation, calibration,
and simulation of deformable objects
This technical report
describes some of my thesis work, focusing on calibrating interactive
deformable models.
|
 |
haptic battle
pong (with neel)
|
 |
voxelizer
voxelizer generates voxel arrays and internal
distance maps for surface meshes.
Technical information is available in the corresponding technical report.
|
 |
winmeshview
winmeshview is a simple (and free) viewer and
converter for 3d surface and tetrahedral meshes.
|
|
cs148: introductory graphics
I taught the intro graphics class
at Stanford over the summer of 2005. The content is archived here.
|
 |
life-sized candyland (with Augusto and Jeff)
we built a life-sized candyland
game. cards are drawn using a clapper,
and candy is dispensed to the winner in the epic game of strategy and skill.
part of the third-floor's holiday extravaganza.
|
 |
audio for
collaborative environments (with merrie)
This project explored the use of private audio channels
in single-display groupware systems, and was published in CSCW
2004.
|
 |
tele-drawing (with neel and kirk)
a system in which a camera
allows a user to tele-operate a robotic arm and draw inspiring
two-color pictures.
|
 |
hybrid rendering (with neel)
this project presents an approach to combining images raytraced offline with
real-time graphics and haptic rendering.
|
 |
haptic images (with neel)
a system that allows a camera to capture an image and render it haptically.
|
 |
fitness racer
instructions on how to control a cheap rc car with a dance dance
revolution pad via your pc, including source code. i call it “fitness
racer”, because relative to coding, stepping on some buttons to drive an
rc car is “fitness”.
|
 |
surgical robot visualization (with intuitive surgical)
a real-time opengl visualization of intuitive's da vinci surgical robot system
|
 |
killer death tag (with neel
and soren)
robots playing tag... more accurately, robots running
about while loud music plays and hopefully convinces the viewer that the
robots are doing something useful. don't miss the exciting
video. also check out
neel's equally cynical and pseudo-profane
take on the project.
|
 |
virtual winter
wonderland (with neel)
via “advanced computer vision techniques”,
viewers are transported into a magical christmas world.
and there are funny hats. part of the
third-floor '03 holiday package.
|
 |
la bastille (with techhouse)
Tetris on a 15-story building...the greatest moment in the history of the pc's
parallel port...
|
 |
march of the snowmen (with the third-floor xmas
team)
...was another entry in the Gates
holiday decoration contest, including Spinny the
spinning snowman and the musical light show.
|
 |
alternative splicing
in arabidopsis
When I was an intern at Cereon Genomics,
I explored the frequency of alternative splicing in arabidopsis
thaliana. Unfortunately, the work was proprietary, so I can't release the results. So
I made this scientifically useless
document describing my work without actually providing any information.
|
 |
random scripts
i just created this directory to post random scripts
that I've written and found to be useful in a way that may be useful to
others. will populate more densely in the future.
|
|
|
|
Set List Generator:
Automatic Constrained Generation of Set Lists
This project uses constrained optimization to generate awesome set lists for
‘80s cover bands. Well it’s not quite that specific, but it’s pretty niche;
nonetheless I’m pretty proud of this level of gratuitous technology use.
|
|
HTML Image Sizer
Ever put together a Web page with lots of images but get a little lazy about
adding size tags? This leads to wacky layout jittering when a page is
loading. I wrote this very simple program - HTML Image Sizer - to fetch an
HTML page and add size tags to all <img> tags, fetching the images as
necessary to determine their sizes.
|
 |
dsm_datestamp
This is a useful little shell extension that I wrote to datestamp/timestamp
files in Windows explorer (append time and date information to the
filename), something I found myself doing manually a lot. For example,
if I have a file called "hello.zip", I can right-click on it,
select "dsm_datestamp", and it becomes "hello.05.04.13.1242.zip".
Useful for project directories you often zip and archive, etc.
Installation
instructions and source are included. Based on a nice tutorial on
shell extensions by Michael
Dunn.
|
 |
multi_audio_lib
Windows make it easy to play sound files, but if you want to play a file
simultaneously on multiple devices, or on a subset of available devices, or
even on a non-default device, it can get a little tricky. This is a simple
C++ library (with source) that lets you play any supported media type (e.g.
mp3, wav) on any subset of available audio devices. In other words, it makes
working with multiple formats and multiple audio devices as simple as the old
standard "playsound" API.
The library is built in
Visual C++ 2003 but should link fine in later versions; the 'lib' directory
has the .h and .lib files that you care about.
You can also download the Java
wrapper I wrote earlier, but this is not quite as clean as the C++ version.
|
 |
stomp-a-grinch
I created Stomp-a-Grinch as part of the Computer Science
building's annual Christmas decoration contest (here's a (video
of the robotics lab contest entry). It's a simple game that
provides the satisfaction of stepping on things and hearing
explosions. Various images appear that are either Grinches or
friends-of-Christmas. You use a Dance-Dance-Revolution floor pad to stomp
on the bad guys, and you rejoice. Here is some video
of folks enjoying the Stomp-a-Grinch.
|
 |
handwriting
synthesis
Confronted with the "Stanford Fund Problem", I wrote this set of Matlab
scripts to allow automatic generation of text in my own handwriting.
You write some text, scan it, manually define a few examples of
each letter (using a helpful GUI), and feed it text.
It randomizes which examples of each letter it uses, the exact position and
spacing of the letters, the baseline of the text, the position of linebreaks,
etc. I never have to write letters by hand again.
Here is a tiny bit of example output.
|
 |
palm keyboard driver
This is an application that allows you to use a Stowaway fold-up keyboard
- intended for use with the Palm Pilot - with a PC. I could
never find a connector for the Palm serial port output, so I
ended up wrapping wires directly onto the keyboard; the wiring
is described in the main .cpp file. This application was also ported
to Linux shortly after I posted it to the wear-hard
newsgroup on wearable computing.
I also wrote a 'calibration program'
for this utility; I used it just to map scan codes from the Palm keyboard
to Windows keyboard events. I run this, then pressed a key on the Palm
keyboard, then the corresponding key on the 'real' keyboard, etc., and it
generates the 'palmkey.ini' file that accompanies the above application.
This program is _not_ very slick... there's just a console, no fancy
icons, etc.
|
 |
liblcd
This is a library that makes it convenient to write strings out to an
Optrex-type LCD module - via the parallel port - from an application. It
handles all the low-level interfacing, so your application can just print
strings or characters. The optrex-type interface seems to be pretty
standard; this is how most of the random character LCD's you come across
are interfaced. I don't know whether this also applies to larger character
LCD's, like the kind they use for highway signs. The wiring diagram is
included, as is the manual for an optrex module that uses the standard
interface. I also include the "portio" library - which I didn't write -
that allows you to access arbitrary ports (specifically the parallel port
i/o ports) in win2k/XP.
|
 |
speechtest_win
This is a fun application that demonstrates the Microsoft speech API,
as it can be used to do something useful in very few lines of code.
In this case, I use the "useful strings" library (described below) to
get fun strings from the web (like news headlines, etc.) and I use the MS
Speech API to read them out loud. If you ever wanted to make your code
talk, MS makes it as easy as printf... Basically this application pops up
a little dialog box that asks the user what he/she wants to hear (MSNBC,
The Onion, the time of day, some random text file in my web directory,
etc.) and how often the information should be read aloud. You'll need to
install the MS speech SDK,
which is free, to play with this app...
|
|
parport_controller
This is a fun application that I wrote when I
was prototyping a controller by wiring all the buttons up to the parallel
port (the parallel port actually is a pretty good way of prototyping a
lot of simple interfaces). The application pops up a dialog box with one
page for each of the eight bits on the parallel port; the user selects
an item that specifies what should happen when that bit changes state
(with separate repsonses to on and off). The events I've defined include
generating mouse events, launching applications, etc. But the structure
of the program hopefully makes it easy to add new events.
|
 |
J.O.H.N.
Java-based observation of the Hopfield
Network, a project I did for a neural networks class I took as an
undergrad. Basically this is here because I'm _still_ amused with the
fact that Java can really run in a browser.
|
|
|
 |
linear elastic material
properties
"linear elastic material
properties" is a little tutorial i put together to remind myself what the basic
elastic moduli mean, since they come up just often enough in my
life that I need to remember what they are but just infrequently enough
that i never remember which is the bulk modulus and which is the young's
modulus, etc.
|
 |
the inertia tensor
"what the hell is the inertia
tensor?" is a little tutorial i put together to remind myself of the
intuition i achieved at some point regarding a topic that comes
up a lot in graphics, haptics, robotics, and simulation.
|
 |
transistors as switches
often times i find myself needing a simple transistor circuit for a hobby
project, and - being not at cosmic oneness with the n or the p -
i typically forget how to connect them, which is the base and which is
the emitter, etc. "using
transistors as switches" is a little tutorial i put together so i could
just download what i usually forget on this topic whenever it comes up.
|
 |
an intuitive but
not-all-that-mathematically-sound explanation of the fourier
transform
"an intuitive but
not-all-that-mathematically-sound explanation of the fourier transform"
is a little tutorial i put together to walk non-signal-processing folks
through the typical formulation of the fourier transform, somewhere between
an explanation and a pneumonic device. this way of looking at it really
helped me in my first signal processing course; hopefully it will be helpful
to someone else too...
|
|
|
|
|
...believe it or not, vga signals actually passed
over the messes of wire in these pictures, bringing many pretty colors
to the tiny displays you see here... this was a typical project at tiqit, where I actually got paid to make
messes like this. |
|
|