dan morris :


(with ian, sumit, and the MSR ADT)

Songsmith lets anyone make music (yes, you!), and provides an “intelligent scratchpad” for songwriters. download it now and send me your first song!

(with scott, Andrew, and Ilya)

Workout automatically finds, recognizes, and counts repetitive exercises from an arm-worn inertial sensor, bringing the awesome-ness of fitness tracking to the gym. Portions of this work shipped as part of the Microsoft Band.

Dan’s Big Awesome Acoustic Songbook

This is my big collection of songs I like to play. Code was involved in the making ofthis songbook.

Pulsatile Signal Analysis
(with the Medical Devices Group)

As part of the Medical Devices Group, I’ve worked on algorithms for identifying and analyzing pulsatile signals. This work has applied to research devices within the group, and has also transferred in code or in spirit to products including the Microsoft Band and the Xbox One Kinect.

patient-friendly displays
(with lauren, laura, and the CUE Group)

This project explores design and technology challenges around making medical information more useful and more intuitive.

SoundWave: Ultrasonics for Gesture
(with Sidhant, Shwetak, and Desney)

Soundwave leverages commodity speakers and microphones to sense in-air gestures. The magic is ultrasonic Doppler.

Sensing Gestures Using the Body Antenna
(with Gabe, Shwetak, and Desney)

Your house is filled with electromagnetic noise. HumAntenna uses that noise to sense gestures.

(with chris and desney)

Skinput uses a novel sensor to turn your arm into a touch screen.


My Running Log

Lest I should allow any activity in my life to not involve writing code, I crawled my gps logs to (a) back up my own data and (b) make this nifty-looking table.


my tometometer

I got curious about what movies I like more or less than everyone else, and parsed the JSON output from Flixster to produce the “tometometer”, a measure of my taste in movies compared to rotten tomatoes.

muscle-computer interfaces
(with scott, desney, and ravin)

Muci's sense electrical muscle activity to infer finger movement.

User-Specific Pitch 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.

(with neema, Merrie, Mary, and Nathalie)

...is a shared display of Web search activity for classroom environments.

Computational Creativity Support 2009
(with jimmy)

“Using Algorithms and Machine Learning to Help People Be More Creative” was a one-day workshop at CHI 2009, bringing together artists and computer scientists.

Dynamic Mapping of Physical Controls
(with Rebecca and Merrie)

This project explores the integration of physical controllers into a multi-touch environment.

Data-Driven Chord Sequence Exploration
(with Eric and Sumit)

This project explores intuitive blending of genre-based statistical models of chord sequences.

mysong (with ian and sumit)

MySong generates chords to accompany a vocal melody, and lets a novice user play with those chords with intuitive parameters.

(with a.j. and brian)

superbreak adds hands-free interactivity to traditional ergonomic break-reminder software.

(with merrie and gina)

searchbar is a browser history centered around search topics and queries.

surgical simulation
(with stanford biorobotics)

my phd work focused on haptics and physical simulation for virtual surgery.

neural prosthetics
(with Cyberkinetics and Brown Neuro)

In a previous life, I worked on neural prosthetics. This page presents basic concepts and code.

chai 3d
(with the chai team)

chai 3d is an open-source scenegrpah library for haptics and graphics.

evaluation of haptic rendering systems
(with stanford biorobotics)

...is a data and analysis repository for evaluating the realism of haptic rendering.

haptic mentoring
(with stanford biorobotics)

The “haptic mentoring” project explored the use of haptics to teach force-sensitive motor skills.

algorithms and data structures for haptics

this technical report describes a few haptics-related data structures and optimizations used in my thesis work.

haptic battle pong
(with neel)

Haptic Battle Pong is still the world’s most awesome six-degree-of-freedom haptic sports/combat game.

HBP web page tech description (pdf) movie of hbp (mp4) slides on HBP (GDC 2004)

calibration of deformable objects

My thesis work involved a pipeline for making non-physically-based deformable models a little more accurate. This paper talks about that.


This page hosts my implementation of the deformable mesh model I used for my thesis work.


voxelizer generates voxel arrays and internal distance maps for surface meshes. also see the tech report.


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. Content archived here. I gave out some free candy, which is not archived.

life-sized candyland
(with Augusto and Jeff)

we built a life-sized candyland game. a clapper was involved, as was actual candy. 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.

(with neel and kirk)

The tele-drawing robot allowed a user to tele-operate a robotic arm (from like 10 feet away) and draw inspiring two-color pictures.

project page .mpeg .wmv

hybrid rendering
(with neel)

This project — which we called “MengkuduGL” for reasons that I can’t remember but probably seemed really funny at the time — combines offline raytracing with real-time graphics and haptics.

project page pdf write-up movie

haptic images
(with neel)

This system allows a camera to capture an image and render it non-visually. We explored haptic and audio rendering of edges, depth, and flow.

surgical robot visualization
(with intuitive surgical)

a real-time opengl visualization of intuitive's da vinci surgical robot system

fitness racer

instructions on how to control a cheap rc car with a dance dance revolution pad via your pc, including code.

killer death tag
(with neel and soren)

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.

virtual winter wonderland

virtual winter wonderland
(with neel)

via “advanced computer vision techniques”, viewers are transported into a magical christmas world. and there are funny hats.

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

As an intern at Cereon Genomics, I explored alternative splicing in arabidopsis thaliana. The results are proprietary, so I made this scientifically useless document describing my contribution without actually providing any information.

Set List Generator

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 got a little lazy about adding size tags? HTML Image Sizer fetches an HTML page and its images and sets size tags for all <img> tags.


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). For example, if I have a file called “hello.zip”, I can right-click on it, select “dsm_datestamp”, and it becomes “hello.”.


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. You can also download the Java wrapper I wrote earlier, but this is not quite as clean as the C++ version.


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. Here is some video of folks enjoying Stomp-a-Grinch.

handwriting synthesis

Confronted with the “Stanford Fund Problem”, I wrote this set of Matlab scripts to generate text in my own handwriting (based on scanned examples). 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. 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 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 is a library that makes it convenient to write strings out to an Optrex-type LCD module — via the parallel port — from an application.

tutorials on random things I kept forgetting about

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.