dan morris :
projects

 


Dan’s Projects

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, but patients are still often under-informed about our own hospital courses. This project explores design and technology challenges around making medical information more useful and more intuitive.

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)

ClassSearch is a shared display of Web search activity for 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 input system, using a novel sensor to identify the location of finger-taps on the hand or forearm.

marathon

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 sense electrical muscle activity to infer finger and hand movement. In the future, this may lead to crazy awesome mobile input.

User-Specific Training for Vocal Melody Transcription (with Andrew and Sumit)

Real-time vocal transcription doesn’t quite work yet; in this work, 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” was a one-day workshop at CHI 2009, bringing together artists and computer scientists to share techniques and challenges.

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 algorithms for 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 Inc. and Brown Neuroscience 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

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

algorithms and data structures for haptic rendering

this technical report describes a few haptics-related data structures and optimizations 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)

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

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

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

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.

tele-drawing (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 .rm .rm - small

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 — presents an approach to combining images raytraced offline with real-time graphics and haptic rendering.

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.

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.

Mini-Projects with Source

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 got 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 (along w/binary versions for x86 and x64). 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.

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...


Physical Simulation Paper Summaries

When I was in grad school, I summarized a few papers that I found to be particularly helpful in getting up to speed on physical simulation and related topics.
Large Steps in Cloth Simulation (Baraff and Witkin) [summary]

Accurate Real-Time Deformable Objects (James and Pai) [summary]

Precomputing Interactive Dynamic Deformable Scenes (James and Fatahalian) [summary]

EigenSkin (Kry, James, and Pai) [summary]

Deformation Transfer for Triangle Meshes (Sumner and Popovic) [summary]

Modeling by Example (Funkhouser et al) [summary]

Fluid Control Using the Adjoint Method (McNamara et al) [summary]

A Versatile and Robust Model for Geometrically Complex Deformable Solids (Teschner et al) [summary]

Stable Fluids (Stam) [summary]



...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.